Mercurial > pidgin
comparison libpurple/protocols/msn/state.c @ 20402:00e7d8ded567
propagate from branch 'im.pidgin.rlaager.merging.msnp13-and-pidgin' (head 8cfbe223ca6e514146a4d46aeab4c7816de17b79)
to branch 'im.pidgin.cpw.khc.msnp14' (head d64cf2078da03ec91620a88bb3408d3eb14a19e2)
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 15 Apr 2007 05:01:55 +0000 |
parents | 4ddc27c18781 6f986caeab59 |
children | 5048651671e1 |
comparison
equal
deleted
inserted
replaced
20401:4ddc27c18781 | 20402:00e7d8ded567 |
---|---|
77 } | 77 } |
78 xmlnode_insert_child(dataNode,guidNode); | 78 xmlnode_insert_child(dataNode,guidNode); |
79 | 79 |
80 result = xmlnode_to_str(dataNode,&length); | 80 result = xmlnode_to_str(dataNode,&length); |
81 return result; | 81 return result; |
82 } | |
83 | |
84 /* parse CurrentMedia string */ | |
85 char * | |
86 msn_parse_currentmedia(const char *cmedia) | |
87 { | |
88 char **cmedia_array; | |
89 char *buffer=NULL, *inptr, *outptr, *tmpptr; | |
90 int length, strings, tmp; | |
91 | |
92 purple_debug_info("msn", "Parsing currentmedia string: \"%s\"\n", cmedia); | |
93 if( (cmedia == NULL) || (!strcmp(cmedia, ""))) { | |
94 purple_debug_info("msn", "No currentmedia string\n"); | |
95 return NULL; | |
96 } | |
97 | |
98 cmedia_array=g_strsplit(cmedia, "\\0", 0); | |
99 | |
100 strings=1; /* Skip first empty string */ | |
101 length=5; /* Space for '\0' (1 byte) and prefix (4 bytes) */ | |
102 while(strcmp(cmedia_array[strings], "")) { | |
103 length+= strlen(cmedia_array[strings]); | |
104 strings++; | |
105 } | |
106 | |
107 if((strings>3) && (!strcmp(cmedia_array[2], "1"))) { /* Check if enabled */ | |
108 | |
109 buffer=g_malloc(length); | |
110 | |
111 inptr=cmedia_array[3]; | |
112 outptr=buffer; | |
113 | |
114 if(!strcmp(cmedia_array[1], "Music")) { | |
115 strcpy(outptr, "np. "); | |
116 outptr+=4; | |
117 }/* else if(!strcmp(cmedia_array[1], "Games")) { | |
118 } else if(!strcmp(cmedia_array[1], "Office")) { | |
119 }*/ | |
120 | |
121 while(*inptr!='\0') { | |
122 if((*inptr == '{') && (strlen(inptr) > 2) && (*(inptr+2) == '}') ) { | |
123 errno = 0; | |
124 tmp = strtol(inptr+1,&tmpptr,10); | |
125 if( (errno!=0) || (tmpptr == (inptr+1)) || | |
126 ((tmp+5)>(strings)) ) { | |
127 *outptr = *inptr; /* Conversion not successful */ | |
128 outptr++; | |
129 } else { | |
130 /* Replace {?} tag with appropriate text */ | |
131 strcpy(outptr, cmedia_array[tmp+4]); | |
132 outptr+=strlen(cmedia_array[tmp+4]); | |
133 inptr+=2; | |
134 } | |
135 } else { | |
136 *outptr = *inptr; | |
137 outptr++; | |
138 } | |
139 inptr++; | |
140 } | |
141 *outptr='\0'; | |
142 purple_debug_info("msn", "Parsed currentmedia string, result: \"%s\"\n", | |
143 buffer); | |
144 } else { | |
145 purple_debug_info("msn", "Current media marked disabled, not parsing\n"); | |
146 } | |
147 | |
148 g_strfreev(cmedia_array); | |
149 return buffer; | |
150 } | |
151 | |
152 /* get the CurrentMedia info from the XML string */ | |
153 char * | |
154 msn_get_currentmedia(char *xml_str, gsize len) | |
155 { | |
156 xmlnode *payloadNode, *currentmediaNode; | |
157 char *currentmedia_str, *currentmedia; | |
158 | |
159 purple_debug_info("msn","msn get CurrentMedia\n"); | |
160 payloadNode = xmlnode_from_str(xml_str, len); | |
161 if (!payloadNode){ | |
162 purple_debug_error("msn","PSM XML parse Error!\n"); | |
163 return NULL; | |
164 } | |
165 currentmediaNode = xmlnode_get_child(payloadNode, "CurrentMedia"); | |
166 if (currentmediaNode == NULL){ | |
167 purple_debug_info("msn","No CurrentMedia Node"); | |
168 g_free(payloadNode); | |
169 return NULL; | |
170 } | |
171 currentmedia_str = xmlnode_get_data(currentmediaNode); | |
172 currentmedia = g_strdup(currentmedia_str); | |
173 | |
174 g_free(currentmediaNode); | |
175 g_free(payloadNode); | |
176 | |
177 return currentmedia; | |
82 } | 178 } |
83 | 179 |
84 /*get the PSM info from the XML string*/ | 180 /*get the PSM info from the XML string*/ |
85 char * | 181 char * |
86 msn_get_psm(char *xml_str, gsize len) | 182 msn_get_psm(char *xml_str, gsize len) |