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)