OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TProtocol.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  * Copyright 2006-2017 The Apache Software Foundation.
20  * https://github.com/apache/thrift
21  */
22 
23 #ifndef _SANDESH_PROTOCOL_TPROTOCOL_H_
24 #define _SANDESH_PROTOCOL_TPROTOCOL_H_ 1
25 
26 #include <map>
27 #include <sandesh/transport/TTransport.h>
28 
29 #include <boost/shared_ptr.hpp>
30 #include <boost/static_assert.hpp>
31 #include <boost/uuid/uuid.hpp>
32 #include <boost/uuid/string_generator.hpp>
33 #include <boost/asio/ip/address.hpp>
34 
35 namespace contrail { namespace sandesh { namespace protocol {
36 
38 
39 // Use this to get around strict aliasing rules.
40 // For example, uint64_t i = bitwise_cast<uint64_t>(returns_double());
41 // The most obvious implementation is to just cast a pointer,
42 // but that doesn't work.
43 // For a pretty in-depth explanation of the problem, see
44 // http://www.cellperformance.com/mike_acton/2006/06/ (...)
45 // understanding_strict_aliasing.html
46 template <typename To, typename From>
47 static inline To bitwise_cast(From from) {
48  BOOST_STATIC_ASSERT(sizeof(From) == sizeof(To));
49 
50  // BAD!!! These are all broken with -O2.
51  //return *reinterpret_cast<To*>(&from); // BAD!!!
52  //return *static_cast<To*>(static_cast<void*>(&from)); // BAD!!!
53  //return *(To*)(void*)&from; // BAD!!!
54 
55  // Super clean and paritally blessed by section 3.9 of the standard.
56  //unsigned char c[sizeof(from)];
57  //memcpy(c, &from, sizeof(from));
58  //To to;
59  //memcpy(&to, c, sizeof(c));
60  //return to;
61 
62  // Slightly more questionable.
63  // Same code emitted by GCC.
64  //To to;
65  //memcpy(&to, &from, sizeof(from));
66  //return to;
67 
68  // Technically undefined, but almost universally supported,
69  // and the most efficient implementation.
70  union {
71  From f;
72  To t;
73  } u;
74  u.f = from;
75  return u.t;
76 }
77 
78 #ifdef HAVE_SYS_PARAM_H
79 #include <sys/param.h>
80 #endif
81 
82 #ifndef __BYTE_ORDER
83 # if defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN)
84 # define __BYTE_ORDER BYTE_ORDER
85 # define __LITTLE_ENDIAN LITTLE_ENDIAN
86 # define __BIG_ENDIAN BIG_ENDIAN
87 # else
88 # include <boost/config.hpp>
89 # include <boost/detail/endian.hpp>
90 # define __BYTE_ORDER BOOST_BYTE_ORDER
91 # ifdef BOOST_LITTLE_ENDIAN
92 # define __LITTLE_ENDIAN __BYTE_ORDER
93 # define __BIG_ENDIAN 0
94 # else
95 # define __LITTLE_ENDIAN 0
96 # define __BIG_ENDIAN __BYTE_ORDER
97 # endif
98 # endif
99 #endif
100 
101 #if __BYTE_ORDER == __BIG_ENDIAN
102 # define ntohll(n) (n)
103 # define htonll(n) (n)
104 # if defined(__GNUC__) && defined(__GLIBC__)
105 # include <byteswap.h>
106 # define htolell(n) bswap_64(n)
107 # define letohll(n) bswap_64(n)
108 # else /* GNUC & GLIBC */
109 # define bswap_64(n) \
110  ( (((n) & 0xff00000000000000ull) >> 56) \
111  | (((n) & 0x00ff000000000000ull) >> 40) \
112  | (((n) & 0x0000ff0000000000ull) >> 24) \
113  | (((n) & 0x000000ff00000000ull) >> 8) \
114  | (((n) & 0x00000000ff000000ull) << 8) \
115  | (((n) & 0x0000000000ff0000ull) << 24) \
116  | (((n) & 0x000000000000ff00ull) << 40) \
117  | (((n) & 0x00000000000000ffull) << 56) )
118 # define htolell(n) bswap_64(n)
119 # define letohll(n) bswap_64(n)
120 # endif /* GNUC & GLIBC */
121 #elif __BYTE_ORDER == __LITTLE_ENDIAN
122 # define htolell(n) (n)
123 # define letohll(n) (n)
124 # if defined(__GNUC__) && defined(__GLIBC__)
125 # include <byteswap.h>
126 # define ntohll(n) bswap_64(n)
127 # define htonll(n) bswap_64(n)
128 # else /* GNUC & GLIBC */
129 # define ntohll(n) ( (((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32) )
130 # define htonll(n) ( (((uint64_t)htonl(n)) << 32) + htonl(n >> 32) )
131 # endif /* GNUC & GLIBC */
132 #else /* __BYTE_ORDER */
133 # error "Can't define htonll or ntohll!"
134 #endif
135 
141 enum TType {
142  T_STOP = 0,
143  T_VOID = 1,
144  T_BOOL = 2,
145  T_BYTE = 3,
146  T_I08 = 3,
147  T_I16 = 6,
148  T_I32 = 8,
149  T_U64 = 9,
150  T_I64 = 10,
151  T_DOUBLE = 4,
152  T_STRING = 11,
153  T_UTF7 = 11,
154  T_STRUCT = 12,
155  T_MAP = 13,
156  T_SET = 14,
157  T_LIST = 15,
158  T_UTF8 = 16,
159  T_UTF16 = 17,
160  T_SANDESH = 18,
161  T_U16 = 19,
162  T_U32 = 20,
163  T_XML = 21,
164  T_IPV4 = 22,
165  T_UUID = 23,
166  T_IPADDR = 24
167 };
168 
174  T_CALL = 1,
175  T_REPLY = 2,
178 };
179 
180 
186 template <class Protocol_>
187 int32_t skip(Protocol_& prot, TType type) {
188  switch (type) {
189  case T_BOOL:
190  {
191  bool boolv;
192  return prot.readBool(boolv);
193  }
194  case T_BYTE:
195  {
196  int8_t bytev;
197  return prot.readByte(bytev);
198  }
199  case T_I16:
200  {
201  int16_t i16;
202  return prot.readI16(i16);
203  }
204  case T_I32:
205  {
206  int32_t i32;
207  return prot.readI32(i32);
208  }
209  case T_I64:
210  {
211  int64_t i64;
212  return prot.readI64(i64);
213  }
214  case T_U16:
215  {
216  uint16_t u16;
217  return prot.readU16(u16);
218  }
219  case T_U32:
220  {
221  uint32_t u32;
222  return prot.readU32(u32);
223  }
224  case T_U64:
225  {
226  uint64_t u64;
227  return prot.readU64(u64);
228  }
229  case T_IPV4:
230  {
231  uint32_t ip4;
232  return prot.readIPV4(ip4);
233  }
234  case T_IPADDR:
235  {
236  boost::asio::ip::address ipaddress;
237  return prot.readIPADDR(ipaddress);
238  }
239  case T_DOUBLE:
240  {
241  double dub;
242  return prot.readDouble(dub);
243  }
244  case T_STRING:
245  {
246  std::string str;
247  return prot.readBinary(str);
248  }
249  case T_XML:
250  {
251  std::string str;
252  return prot.readXML(str);
253  }
254  case T_UUID:
255  {
257  return prot.readUUID(uuid);
258  }
259  case T_STRUCT:
260  {
261  int32_t result = 0;
262  int32_t ret;
263  std::string name;
264  int16_t fid;
265  TType ftype;
266  if ((ret = prot.readStructBegin(name)) < 0) {
267  return ret;
268  }
269  result += ret;
270  while (true) {
271  if ((ret = prot.readFieldBegin(name, ftype, fid)) < 0) {
272  return ret;
273  }
274  result += ret;
275  if (ftype == T_STOP) {
276  break;
277  }
278  if ((ret = skip(prot, ftype)) < 0) {
279  return ret;
280  }
281  result += ret;
282  if ((ret = prot.readFieldEnd()) < 0) {
283  return ret;
284  }
285  result += ret;
286  }
287  if ((ret = prot.readStructEnd()) < 0) {
288  return ret;
289  }
290  result += ret;
291  return result;
292  }
293  case T_SANDESH:
294  {
295  int32_t result = 0;
296  int32_t ret;
297  std::string name;
298  int16_t fid;
299  TType ftype;
300  if ((ret = prot.readSandeshBegin(name)) < 0) {
301  return ret;
302  }
303  result += ret;
304  while (true) {
305  if ((ret = prot.readFieldBegin(name, ftype, fid)) < 0) {
306  return ret;
307  }
308  result += ret;
309  if (ftype == T_STOP) {
310  break;
311  }
312  if ((ret = skip(prot, ftype)) < 0) {
313  return ret;
314  }
315  result += ret;
316  if ((ret = prot.readFieldEnd()) < 0) {
317  return ret;
318  }
319  result += ret;
320  }
321  if ((ret = prot.readSandeshEnd()) < 0) {
322  return ret;
323  }
324  result += ret;
325  return result;
326  }
327  case T_MAP:
328  {
329  int32_t result = 0;
330  int32_t ret;
331  TType keyType;
332  TType valType;
333  uint32_t i, size;
334  if ((ret = prot.readMapBegin(keyType, valType, size)) < 0) {
335  return ret;
336  }
337  result += ret;
338  for (i = 0; i < size; i++) {
339  if ((ret = skip(prot, keyType)) < 0) {
340  return ret;
341  }
342  result += ret;
343  if ((ret = skip(prot, valType)) < 0) {
344  return ret;
345  }
346  result += ret;
347  }
348  if ((ret = prot.readMapEnd()) < 0) {
349  return ret;
350  }
351  result += ret;
352  return result;
353  }
354  case T_SET:
355  {
356  int32_t result = 0;
357  int32_t ret;
358  TType elemType;
359  uint32_t i, size;
360  if ((ret = prot.readSetBegin(elemType, size)) < 0) {
361  return ret;
362  }
363  result += ret;
364  for (i = 0; i < size; i++) {
365  if ((ret = skip(prot, elemType)) < 0) {
366  return ret;
367  }
368  result += ret;
369  }
370  if ((ret = prot.readSetEnd()) < 0) {
371  return ret;
372  }
373  result += ret;
374  return result;
375  }
376  case T_LIST:
377  {
378  int32_t result = 0;
379  int32_t ret;
380  TType elemType;
381  uint32_t i, size;
382  if ((ret = prot.readListBegin(elemType, size)) < 0) {
383  return ret;
384  }
385  result += ret;
386  for (i = 0; i < size; i++) {
387  if ((ret = skip(prot, elemType)) < 0) {
388  return ret;
389  }
390  result += ret;
391  }
392  if ((ret = prot.readListEnd()) < 0) {
393  return ret;
394  }
395  result += ret;
396  return result;
397  }
398  case T_STOP: case T_VOID: case T_UTF8: case T_UTF16:
399  break;
400  }
401  return 0;
402 }
403 
418 class TProtocol {
419  public:
420  virtual ~TProtocol() {}
421 
426  virtual int32_t writeMessageBegin_virt(const std::string& name,
427  const TMessageType messageType,
428  const int32_t seqid) = 0;
429 
430  virtual int32_t writeMessageEnd_virt() = 0;
431 
432 
433  virtual int32_t writeStructBegin_virt(const char* name) = 0;
434 
435  virtual int32_t writeStructEnd_virt() = 0;
436 
437  virtual int32_t writeSandeshBegin_virt(const char* name) = 0;
438 
439  virtual int32_t writeSandeshEnd_virt() = 0;
440 
441  virtual int32_t writeContainerElementBegin_virt() = 0;
442 
443  virtual int32_t writeContainerElementEnd_virt() = 0;
444 
445  virtual int32_t writeFieldBegin_virt(const char* name,
446  const TType fieldType,
447  const int16_t fieldId,
448  const std::map<std::string, std::string> *const amap) = 0;
449 
450  virtual int32_t writeFieldEnd_virt() = 0;
451 
452  virtual int32_t writeFieldStop_virt() = 0;
453 
454  virtual int32_t writeMapBegin_virt(const TType keyType,
455  const TType valType,
456  const uint32_t size) = 0;
457 
458  virtual int32_t writeMapEnd_virt() = 0;
459 
460  virtual int32_t writeListBegin_virt(const TType elemType,
461  const uint32_t size) = 0;
462 
463  virtual int32_t writeListEnd_virt() = 0;
464 
465  virtual int32_t writeSetBegin_virt(const TType elemType,
466  const uint32_t size) = 0;
467 
468  virtual int32_t writeSetEnd_virt() = 0;
469 
470  virtual int32_t writeBool_virt(const bool value) = 0;
471 
472  virtual int32_t writeByte_virt(const int8_t byte) = 0;
473 
474  virtual int32_t writeI16_virt(const int16_t i16) = 0;
475 
476  virtual int32_t writeI32_virt(const int32_t i32) = 0;
477 
478  virtual int32_t writeI64_virt(const int64_t i64) = 0;
479 
480  virtual int32_t writeU16_virt(const uint16_t u16) = 0;
481 
482  virtual int32_t writeU32_virt(const uint32_t u32) = 0;
483 
484  virtual int32_t writeU64_virt(const uint64_t u64) = 0;
485 
486  virtual int32_t writeIPV4_virt(const uint32_t ip4) = 0;
487 
488  virtual int32_t writeIPADDR_virt(const boost::asio::ip::address& ipaddress) = 0;
489 
490  virtual int32_t writeDouble_virt(const double dub) = 0;
491 
492  virtual int32_t writeString_virt(const std::string& str) = 0;
493 
494  virtual int32_t writeBinary_virt(const std::string& str) = 0;
495 
496  virtual int32_t writeXML_virt(const std::string& str) = 0;
497 
498  virtual int32_t writeUUID_virt(const boost::uuids::uuid& uuid) = 0;
499 
500  int32_t writeMessageBegin(const std::string& name,
501  const TMessageType messageType,
502  const int32_t seqid) {
503  return writeMessageBegin_virt(name, messageType, seqid);
504  }
505 
506  int32_t writeMessageEnd() {
507  return writeMessageEnd_virt();
508  }
509 
510  int32_t writeStructBegin(const char* name) {
511  return writeStructBegin_virt(name);
512  }
513 
514  int32_t writeStructEnd() {
515  return writeStructEnd_virt();
516  }
517 
518  int32_t writeSandeshBegin(const char* name) {
519  return writeSandeshBegin_virt(name);
520  }
521 
522  int32_t writeSandeshEnd() {
523  return writeSandeshEnd_virt();
524  }
525 
528  }
529 
532  }
533 
534  int32_t writeFieldBegin(const char* name,
535  const TType fieldType,
536  const int16_t fieldId,
537  const std::map<std::string, std::string> *const amap = NULL) {
538  return writeFieldBegin_virt(name, fieldType, fieldId, amap);
539  }
540 
541  int32_t writeFieldEnd() {
542  return writeFieldEnd_virt();
543  }
544 
545  int32_t writeFieldStop() {
546  return writeFieldStop_virt();
547  }
548 
549  int32_t writeMapBegin(const TType keyType,
550  const TType valType,
551  const uint32_t size) {
552  return writeMapBegin_virt(keyType, valType, size);
553  }
554 
555  int32_t writeMapEnd() {
556  return writeMapEnd_virt();
557  }
558 
559  int32_t writeListBegin(const TType elemType, const uint32_t size) {
560  return writeListBegin_virt(elemType, size);
561  }
562 
563  int32_t writeListEnd() {
564  return writeListEnd_virt();
565  }
566 
567  int32_t writeSetBegin(const TType elemType, const uint32_t size) {
568  return writeSetBegin_virt(elemType, size);
569  }
570 
571  int32_t writeSetEnd() {
572  return writeSetEnd_virt();
573  }
574 
575  int32_t writeBool(const bool value) {
576  return writeBool_virt(value);
577  }
578 
579  int32_t writeByte(const int8_t byte) {
580  return writeByte_virt(byte);
581  }
582 
583  int32_t writeI16(const int16_t i16) {
584  return writeI16_virt(i16);
585  }
586 
587  int32_t writeI32(const int32_t i32) {
588  return writeI32_virt(i32);
589  }
590 
591  int32_t writeI64(const int64_t i64) {
592  return writeI64_virt(i64);
593  }
594 
595  int32_t writeU16(const uint16_t u16) {
596  return writeU16_virt(u16);
597  }
598 
599  int32_t writeU32(const uint32_t u32) {
600  return writeU32_virt(u32);
601  }
602 
603  int32_t writeU64(const uint64_t u64) {
604  return writeU64_virt(u64);
605  }
606 
607  int32_t writeIPV4(const uint32_t ip4) {
608  return writeIPV4_virt(ip4);
609  }
610 
611  int32_t writeIPADDR(const boost::asio::ip::address& ipaddress) {
612  return writeIPADDR_virt(ipaddress);
613  }
614 
615  int32_t writeDouble(const double dub) {
616  return writeDouble_virt(dub);
617  }
618 
619  int32_t writeString(const std::string& str) {
620  return writeString_virt(str);
621  }
622 
623  int32_t writeBinary(const std::string& str) {
624  return writeBinary_virt(str);
625  }
626 
627  int32_t writeXML(const std::string& str) {
628  return writeXML_virt(str);
629  }
630 
632  return writeUUID_virt(uuid);
633  }
634 
639  virtual int32_t readMessageBegin_virt(std::string& name,
640  TMessageType& messageType,
641  int32_t& seqid) = 0;
642 
643  virtual int32_t readMessageEnd_virt() = 0;
644 
645  virtual int32_t readStructBegin_virt(std::string& name) = 0;
646 
647  virtual int32_t readStructEnd_virt() = 0;
648 
649  virtual int32_t readSandeshBegin_virt(std::string& name) = 0;
650 
651  virtual int32_t readSandeshEnd_virt() = 0;
652 
653  virtual int32_t readContainerElementBegin_virt() = 0;
654 
655  virtual int32_t readContainerElementEnd_virt() = 0;
656 
657  virtual int32_t readFieldBegin_virt(std::string& name,
658  TType& fieldType,
659  int16_t& fieldId) = 0;
660 
661  virtual int32_t readFieldEnd_virt() = 0;
662 
663  virtual int32_t readMapBegin_virt(TType& keyType,
664  TType& valType,
665  uint32_t& size) = 0;
666 
667  virtual int32_t readMapEnd_virt() = 0;
668 
669  virtual int32_t readListBegin_virt(TType& elemType,
670  uint32_t& size) = 0;
671 
672  virtual int32_t readListEnd_virt() = 0;
673 
674  virtual int32_t readSetBegin_virt(TType& elemType,
675  uint32_t& size) = 0;
676 
677  virtual int32_t readSetEnd_virt() = 0;
678 
679  virtual int32_t readBool_virt(bool& value) = 0;
680 
681  virtual int32_t readBool_virt(std::vector<bool>::reference value) = 0;
682 
683  virtual int32_t readByte_virt(int8_t& byte) = 0;
684 
685  virtual int32_t readI16_virt(int16_t& i16) = 0;
686 
687  virtual int32_t readI32_virt(int32_t& i32) = 0;
688 
689  virtual int32_t readI64_virt(int64_t& i64) = 0;
690 
691  virtual int32_t readU16_virt(uint16_t& u16) = 0;
692 
693  virtual int32_t readU32_virt(uint32_t& u32) = 0;
694 
695  virtual int32_t readU64_virt(uint64_t& u64) = 0;
696 
697  virtual int32_t readIPV4_virt(uint32_t& ip4) = 0;
698 
699  virtual int32_t readIPADDR_virt(boost::asio::ip::address& ipaddress) = 0;
700 
701  virtual int32_t readDouble_virt(double& dub) = 0;
702 
703  virtual int32_t readString_virt(std::string& str) = 0;
704 
705  virtual int32_t readBinary_virt(std::string& str) = 0;
706 
707  virtual int32_t readXML_virt(std::string& str) = 0;
708 
709  virtual int32_t readUUID_virt(boost::uuids::uuid& uuid) = 0;
710 
711  int32_t readMessageBegin(std::string& name,
712  TMessageType& messageType,
713  int32_t& seqid) {
714  return readMessageBegin_virt(name, messageType, seqid);
715  }
716 
717  int32_t readMessageEnd() {
718  return readMessageEnd_virt();
719  }
720 
721  int32_t readStructBegin(std::string& name) {
722  return readStructBegin_virt(name);
723  }
724 
725  int32_t readStructEnd() {
726  return readStructEnd_virt();
727  }
728 
729  int32_t readSandeshBegin(std::string& name) {
730  return readSandeshBegin_virt(name);
731  }
732 
733  int32_t readSandeshEnd() {
734  return readSandeshEnd_virt();
735  }
736 
739  }
740 
743  }
744 
745  int32_t readFieldBegin(std::string& name,
746  TType& fieldType,
747  int16_t& fieldId) {
748  return readFieldBegin_virt(name, fieldType, fieldId);
749  }
750 
751  int32_t readFieldEnd() {
752  return readFieldEnd_virt();
753  }
754 
755  int32_t readMapBegin(TType& keyType, TType& valType, uint32_t& size) {
756  return readMapBegin_virt(keyType, valType, size);
757  }
758 
759  int32_t readMapEnd() {
760  return readMapEnd_virt();
761  }
762 
763  int32_t readListBegin(TType& elemType, uint32_t& size) {
764  return readListBegin_virt(elemType, size);
765  }
766 
767  int32_t readListEnd() {
768  return readListEnd_virt();
769  }
770 
771  int32_t readSetBegin(TType& elemType, uint32_t& size) {
772  return readSetBegin_virt(elemType, size);
773  }
774 
775  int32_t readSetEnd() {
776  return readSetEnd_virt();
777  }
778 
779  int32_t readBool(bool& value) {
780  return readBool_virt(value);
781  }
782 
783  int32_t readByte(int8_t& byte) {
784  return readByte_virt(byte);
785  }
786 
787  int32_t readI16(int16_t& i16) {
788  return readI16_virt(i16);
789  }
790 
791  int32_t readI32(int32_t& i32) {
792  return readI32_virt(i32);
793  }
794 
795  int32_t readI64(int64_t& i64) {
796  return readI64_virt(i64);
797  }
798 
799  int32_t readU16(uint16_t& u16) {
800  return readU16_virt(u16);
801  }
802 
803  int32_t readU32(uint32_t& u32) {
804  return readU32_virt(u32);
805  }
806 
807  int32_t readU64(uint64_t& u64) {
808  return readU64_virt(u64);
809  }
810 
811  int32_t readIPV4(uint32_t& ip4) {
812  return readIPV4_virt(ip4);
813  }
814 
815  int32_t readIPADDR(boost::asio::ip::address& ipaddress) {
816  return readIPADDR_virt(ipaddress);
817  }
818 
819  int32_t readDouble(double& dub) {
820  return readDouble_virt(dub);
821  }
822 
823  int32_t readString(std::string& str) {
824  return readString_virt(str);
825  }
826 
827  int32_t readBinary(std::string& str) {
828  return readBinary_virt(str);
829  }
830 
831  int32_t readXML(std::string& str) {
832  return readXML_virt(str);
833  }
834 
836  return readUUID_virt(uuid);
837  }
838 
839  /*
840  * std::vector is specialized for bool, and its elements are individual bits
841  * rather than bools. We need to define a different version of readBool()
842  * to work with std::vector<bool>.
843  */
844  int32_t readBool(std::vector<bool>::reference value) {
845  return readBool_virt(value);
846  }
847 
851  int32_t skip(TType type) {
852  return skip_virt(type);
853  }
854  virtual int32_t skip_virt(TType type) {
856  }
857 
858  inline boost::shared_ptr<TTransport> getTransport() {
859  return ptrans_;
860  }
861 
862  protected:
863  TProtocol(boost::shared_ptr<TTransport> ptrans):
864  ptrans_(ptrans) {
865  }
866 
867  boost::shared_ptr<TTransport> ptrans_;
868 
869  private:
871 };
872 
877 public:
879 
880  virtual ~TProtocolFactory() {}
881 
882  virtual boost::shared_ptr<TProtocol> getProtocol(boost::shared_ptr<TTransport> trans) = 0;
883 };
884 
885 }}} // contrail::sandesh::protocol
886 
887 #endif // #define _SANDESH_PROTOCOL_TPROTOCOL_H_ 1
virtual boost::shared_ptr< TProtocol > getProtocol(boost::shared_ptr< TTransport > trans)=0
int32_t writeListBegin(const TType elemType, const uint32_t size)
Definition: TProtocol.h:559
int32_t writeString(const std::string &str)
Definition: TProtocol.h:619
int32_t readU16(uint16_t &u16)
Definition: TProtocol.h:799
virtual int32_t readBool_virt(bool &value)=0
int32_t writeMapBegin(const TType keyType, const TType valType, const uint32_t size)
Definition: TProtocol.h:549
int32_t readSandeshBegin(std::string &name)
Definition: TProtocol.h:729
virtual int32_t readByte_virt(int8_t &byte)=0
int32_t writeXML(const std::string &str)
Definition: TProtocol.h:627
virtual int32_t writeMessageEnd_virt()=0
int32_t readBool(std::vector< bool >::reference value)
Definition: TProtocol.h:844
int32_t writeBool(const bool value)
Definition: TProtocol.h:575
virtual int32_t readMessageBegin_virt(std::string &name, TMessageType &messageType, int32_t &seqid)=0
int32_t writeIPV4(const uint32_t ip4)
Definition: TProtocol.h:607
virtual int32_t readFieldBegin_virt(std::string &name, TType &fieldType, int16_t &fieldId)=0
virtual int32_t readUUID_virt(boost::uuids::uuid &uuid)=0
virtual int32_t writeIPV4_virt(const uint32_t ip4)=0
int32_t writeIPADDR(const boost::asio::ip::address &ipaddress)
Definition: TProtocol.h:611
virtual int32_t readI64_virt(int64_t &i64)=0
int32_t writeMessageBegin(const std::string &name, const TMessageType messageType, const int32_t seqid)
Definition: TProtocol.h:500
int32_t readUUID(boost::uuids::uuid &uuid)
Definition: TProtocol.h:835
boost::uuids::uuid uuid
int32_t writeU16(const uint16_t u16)
Definition: TProtocol.h:595
virtual int32_t writeContainerElementEnd_virt()=0
int32_t readMapBegin(TType &keyType, TType &valType, uint32_t &size)
Definition: TProtocol.h:755
virtual int32_t readU64_virt(uint64_t &u64)=0
int32_t writeBinary(const std::string &str)
Definition: TProtocol.h:623
int32_t writeUUID(const boost::uuids::uuid &uuid)
Definition: TProtocol.h:631
virtual int32_t readListBegin_virt(TType &elemType, uint32_t &size)=0
virtual int32_t readU16_virt(uint16_t &u16)=0
virtual int32_t readI32_virt(int32_t &i32)=0
int32_t readIPADDR(boost::asio::ip::address &ipaddress)
Definition: TProtocol.h:815
int32_t readByte(int8_t &byte)
Definition: TProtocol.h:783
int32_t readSetBegin(TType &elemType, uint32_t &size)
Definition: TProtocol.h:771
int32_t readMessageBegin(std::string &name, TMessageType &messageType, int32_t &seqid)
Definition: TProtocol.h:711
int32_t writeU32(const uint32_t u32)
Definition: TProtocol.h:599
virtual int32_t writeMessageBegin_virt(const std::string &name, const TMessageType messageType, const int32_t seqid)=0
virtual int32_t readIPV4_virt(uint32_t &ip4)=0
virtual int32_t readSetBegin_virt(TType &elemType, uint32_t &size)=0
int32_t writeDouble(const double dub)
Definition: TProtocol.h:615
int32_t readBinary(std::string &str)
Definition: TProtocol.h:827
virtual int32_t readContainerElementEnd_virt()=0
int32_t writeSandeshBegin(const char *name)
Definition: TProtocol.h:518
virtual int32_t writeI32_virt(const int32_t i32)=0
virtual int32_t writeByte_virt(const int8_t byte)=0
uint8_t type
Definition: load_balance.h:109
virtual int32_t readU32_virt(uint32_t &u32)=0
virtual int32_t writeSandeshBegin_virt(const char *name)=0
virtual int32_t writeString_virt(const std::string &str)=0
virtual int32_t writeStructBegin_virt(const char *name)=0
virtual int32_t writeI64_virt(const int64_t i64)=0
static To bitwise_cast(From from)
Definition: TProtocol.h:47
virtual int32_t writeSandeshEnd_virt()=0
int32_t writeStructBegin(const char *name)
Definition: TProtocol.h:510
int32_t writeI32(const int32_t i32)
Definition: TProtocol.h:587
virtual int32_t writeIPADDR_virt(const boost::asio::ip::address &ipaddress)=0
virtual int32_t writeSetBegin_virt(const TType elemType, const uint32_t size)=0
virtual int32_t writeFieldBegin_virt(const char *name, const TType fieldType, const int16_t fieldId, const std::map< std::string, std::string > *const amap)=0
int32_t readFieldBegin(std::string &name, TType &fieldType, int16_t &fieldId)
Definition: TProtocol.h:745
int32_t readIPV4(uint32_t &ip4)
Definition: TProtocol.h:811
virtual int32_t readStructBegin_virt(std::string &name)=0
virtual int32_t writeBinary_virt(const std::string &str)=0
virtual int32_t writeDouble_virt(const double dub)=0
int32_t readXML(std::string &str)
Definition: TProtocol.h:831
int32_t readString(std::string &str)
Definition: TProtocol.h:823
int32_t writeSetBegin(const TType elemType, const uint32_t size)
Definition: TProtocol.h:567
virtual int32_t readXML_virt(std::string &str)=0
virtual int32_t writeUUID_virt(const boost::uuids::uuid &uuid)=0
virtual int32_t writeU16_virt(const uint16_t u16)=0
virtual int32_t readString_virt(std::string &str)=0
virtual int32_t writeU64_virt(const uint64_t u64)=0
virtual int32_t readBinary_virt(std::string &str)=0
virtual int32_t writeListBegin_virt(const TType elemType, const uint32_t size)=0
TProtocol(boost::shared_ptr< TTransport > ptrans)
Definition: TProtocol.h:863
virtual int32_t readContainerElementBegin_virt()=0
virtual int32_t skip_virt(TType type)
Definition: TProtocol.h:854
int32_t writeFieldBegin(const char *name, const TType fieldType, const int16_t fieldId, const std::map< std::string, std::string > *const amap=NULL)
Definition: TProtocol.h:534
virtual int32_t writeBool_virt(const bool value)=0
boost::shared_ptr< TTransport > getTransport()
Definition: TProtocol.h:858
int32_t writeU64(const uint64_t u64)
Definition: TProtocol.h:603
virtual int32_t readDouble_virt(double &dub)=0
virtual int32_t writeContainerElementBegin_virt()=0
virtual int32_t writeMapBegin_virt(const TType keyType, const TType valType, const uint32_t size)=0
virtual int32_t readSandeshBegin_virt(std::string &name)=0
virtual int32_t readIPADDR_virt(boost::asio::ip::address &ipaddress)=0
virtual int32_t readMapBegin_virt(TType &keyType, TType &valType, uint32_t &size)=0
virtual int32_t writeU32_virt(const uint32_t u32)=0
int32_t readListBegin(TType &elemType, uint32_t &size)
Definition: TProtocol.h:763
int32_t writeI16(const int16_t i16)
Definition: TProtocol.h:583
int32_t writeI64(const int64_t i64)
Definition: TProtocol.h:591
int32_t readStructBegin(std::string &name)
Definition: TProtocol.h:721
int32_t writeByte(const int8_t byte)
Definition: TProtocol.h:579
virtual int32_t writeXML_virt(const std::string &str)=0
int32_t readU32(uint32_t &u32)
Definition: TProtocol.h:803
int32_t readU64(uint64_t &u64)
Definition: TProtocol.h:807
virtual int32_t readI16_virt(int16_t &i16)=0
int32_t skip(Protocol_ &prot, TType type)
Definition: TProtocol.h:187
virtual int32_t writeI16_virt(const int16_t i16)=0
boost::shared_ptr< TTransport > ptrans_
Definition: TProtocol.h:867