SDP client for myBlueUSB

Dependents:   mbed_TANK_Kinect ftusbClass

Committer:
networker
Date:
Sat Jun 11 19:43:36 2011 +0000
Revision:
4:d5c3e499603d
Parent:
3:e8d2ebb7392e
added some further server functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
networker 0:7493bf6bb1b9 1 #ifndef SDP_DATA_H
networker 0:7493bf6bb1b9 2 #define SDP_DATA_H
networker 0:7493bf6bb1b9 3
networker 0:7493bf6bb1b9 4 #include <vector>
networker 0:7493bf6bb1b9 5
networker 0:7493bf6bb1b9 6 extern const unsigned char base_uuid[16];// = { 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0, 0x07, 0x70, 0, 0x10, 0, 0};
networker 0:7493bf6bb1b9 7
networker 0:7493bf6bb1b9 8 class sdp_data {
networker 0:7493bf6bb1b9 9 public:
networker 0:7493bf6bb1b9 10 enum elements { NULL_, UNSIGNED, SIGNED, UUID, STRING, BOOL, SEQUENCE, ALTERNATIVE, URL};
networker 0:7493bf6bb1b9 11 private:
networker 0:7493bf6bb1b9 12 enum elements type;
networker 0:7493bf6bb1b9 13 char size;
networker 0:7493bf6bb1b9 14 union {
networker 0:7493bf6bb1b9 15 unsigned data;
networker 0:7493bf6bb1b9 16 char *str;
networker 0:7493bf6bb1b9 17 #ifdef LONGUUID
networker 0:7493bf6bb1b9 18 unsigned short uuid[8];
networker 0:7493bf6bb1b9 19 #endif
networker 0:7493bf6bb1b9 20 };
networker 2:d5a27b2d2e08 21 vector<sdp_data*> sequence; //not allowed to be in union
networker 0:7493bf6bb1b9 22 static char ret[12];
networker 0:7493bf6bb1b9 23 char *longstr;
networker 0:7493bf6bb1b9 24 public:
networker 0:7493bf6bb1b9 25 sdp_data(): type(NULL_), size(0), longstr(0) {
networker 0:7493bf6bb1b9 26 //printf("NULL%d ", size);
networker 0:7493bf6bb1b9 27 }
networker 0:7493bf6bb1b9 28 sdp_data(unsigned d, unsigned sz=4): type(UNSIGNED), size(sz), longstr(0) {
networker 0:7493bf6bb1b9 29 data=d;
networker 0:7493bf6bb1b9 30 //printf("UINT%d=%u ", size, data);
networker 0:7493bf6bb1b9 31 }
networker 3:e8d2ebb7392e 32 sdp_data(unsigned short d, unsigned sz=2): type(UNSIGNED), size(sz), longstr(0) {
networker 3:e8d2ebb7392e 33 data=d;
networker 3:e8d2ebb7392e 34 //printf("UINT%d=%u ", size, data);
networker 3:e8d2ebb7392e 35 }
networker 0:7493bf6bb1b9 36 sdp_data(signed d, unsigned sz=4): type(SIGNED), size(sz), longstr(0) {
networker 0:7493bf6bb1b9 37 data=d;
networker 2:d5a27b2d2e08 38 //printf("INT%d=%d ", size, data);
networker 0:7493bf6bb1b9 39 }
networker 0:7493bf6bb1b9 40 sdp_data(bool d, unsigned sz=1): type(BOOL), size(sz), longstr(0) {
networker 0:7493bf6bb1b9 41 data=d;
networker 2:d5a27b2d2e08 42 //printf("BOOL%d=%u ", size, data);
networker 0:7493bf6bb1b9 43 }
networker 0:7493bf6bb1b9 44 sdp_data(char*s, unsigned sz=0): type(STRING), longstr(0) {
networker 2:d5a27b2d2e08 45 if (sz) size = sz+1;
networker 0:7493bf6bb1b9 46 else size = strlen(s)+1;
networker 0:7493bf6bb1b9 47 str = new char[size];
networker 0:7493bf6bb1b9 48 strncpy(str, s, size);
networker 2:d5a27b2d2e08 49 str[size-1] = '\0';
networker 2:d5a27b2d2e08 50 //printf("STR%d='%s' ", size, str);
networker 0:7493bf6bb1b9 51 }
networker 0:7493bf6bb1b9 52 sdp_data(enum elements t, unsigned d, unsigned sz=2): type(t), size(sz), longstr(0) {
networker 0:7493bf6bb1b9 53 if (t==UUID) {
networker 0:7493bf6bb1b9 54 #ifdef LONGUUID
networker 0:7493bf6bb1b9 55 memcpy(uuid, base_uuid, 16);
networker 0:7493bf6bb1b9 56 uuid[6] = d;
networker 0:7493bf6bb1b9 57 uuid[7] = d>>16;
networker 0:7493bf6bb1b9 58 // printf("UUID%d=%04X%04X ", size, uuid[7], uuid[6]);
networker 0:7493bf6bb1b9 59 #else
networker 0:7493bf6bb1b9 60 data = d;
networker 0:7493bf6bb1b9 61 #endif
networker 0:7493bf6bb1b9 62 } else printf("Please use other constructor for type %d\n", t);
networker 0:7493bf6bb1b9 63 }
networker 0:7493bf6bb1b9 64 sdp_data(enum elements t, char *d=0, unsigned sz=0): type(t), size(sz), longstr(0) {
networker 0:7493bf6bb1b9 65 switch (t) {
networker 0:7493bf6bb1b9 66 #ifdef LONGUUID
networker 0:7493bf6bb1b9 67 case UUID:
networker 0:7493bf6bb1b9 68 memcpy(uuid, d, size);
networker 0:7493bf6bb1b9 69 // printf("UUID%d=%08X ", size, uuid[6]);
networker 0:7493bf6bb1b9 70 break;
networker 0:7493bf6bb1b9 71 #endif
networker 0:7493bf6bb1b9 72 case URL:
networker 0:7493bf6bb1b9 73 //size = strlen(d)+1;
networker 0:7493bf6bb1b9 74 str = new char[size+1];
networker 0:7493bf6bb1b9 75 strcpy(str, d);
networker 0:7493bf6bb1b9 76 // printf("URL%d='%u' ", size, str);
networker 0:7493bf6bb1b9 77 break;
networker 0:7493bf6bb1b9 78 case SEQUENCE:
networker 0:7493bf6bb1b9 79 case ALTERNATIVE:
networker 0:7493bf6bb1b9 80 break;
networker 0:7493bf6bb1b9 81 default:
networker 0:7493bf6bb1b9 82 printf("Please use other constructor for type %d\n", t);
networker 0:7493bf6bb1b9 83 }
networker 0:7493bf6bb1b9 84 }
networker 0:7493bf6bb1b9 85 ~sdp_data() {
networker 0:7493bf6bb1b9 86 switch (type) {
networker 0:7493bf6bb1b9 87 case STRING:
networker 0:7493bf6bb1b9 88 case URL:
networker 0:7493bf6bb1b9 89 delete[] str;
networker 0:7493bf6bb1b9 90 break;
networker 0:7493bf6bb1b9 91 case SEQUENCE:
networker 0:7493bf6bb1b9 92 case ALTERNATIVE:
networker 0:7493bf6bb1b9 93 for (int i = 0; i < sequence.size(); i++)
networker 0:7493bf6bb1b9 94 delete sequence.at(i);
networker 0:7493bf6bb1b9 95 break;
networker 0:7493bf6bb1b9 96 }
networker 2:d5a27b2d2e08 97 if (longstr)
networker 2:d5a27b2d2e08 98 delete[] longstr;
networker 0:7493bf6bb1b9 99 }
networker 0:7493bf6bb1b9 100 void add_element(sdp_data *el) {
networker 0:7493bf6bb1b9 101 sequence.push_back(el);
networker 0:7493bf6bb1b9 102 size += el->Size();
networker 0:7493bf6bb1b9 103 }
networker 0:7493bf6bb1b9 104 unsigned asUnsigned() ;
networker 0:7493bf6bb1b9 105 const char* asString(bool alt=false) ;
networker 0:7493bf6bb1b9 106 unsigned Size() ;
networker 3:e8d2ebb7392e 107 unsigned items() { return sequence.size();}
networker 3:e8d2ebb7392e 108 sdp_data* item(int i) { return sequence[i];}
networker 3:e8d2ebb7392e 109 void remove(int i) { sequence[i] = 0;}
networker 0:7493bf6bb1b9 110 unsigned sizedesc(unsigned char *buf) ;
networker 0:7493bf6bb1b9 111 void revcpy(unsigned char*d, const unsigned char*s, int n) ;
networker 0:7493bf6bb1b9 112 unsigned build(unsigned char *buf, unsigned max) ;
networker 3:e8d2ebb7392e 113 bool findUUID(unsigned uuid);
networker 0:7493bf6bb1b9 114 };
networker 0:7493bf6bb1b9 115
networker 0:7493bf6bb1b9 116 #endif