comparison libpurple/util.c @ 29298:fb99a0067812

propagate from branch 'im.pidgin.pidgin' (head 70d69397ed952b26b453423c381c70d6783eb66d) to branch 'im.pidgin.cpw.attention_ui' (head 1cf0dea282a0d0e4aeac4770e0150d6d0c10830a)
author Marcus Lundblad <ml@update.uu.se>
date Thu, 13 Aug 2009 17:42:44 +0000
parents da22b6d0151e
children 9358464cdf6a
comparison
equal deleted inserted replaced
29297:338d6a211055 29298:fb99a0067812
3517 **************************************************************************/ 3517 **************************************************************************/
3518 3518
3519 void purple_got_protocol_handler_uri(const char *uri) 3519 void purple_got_protocol_handler_uri(const char *uri)
3520 { 3520 {
3521 char proto[11]; 3521 char proto[11];
3522 char delimiter;
3522 const char *tmp, *param_string; 3523 const char *tmp, *param_string;
3523 char *cmd; 3524 char *cmd;
3524 GHashTable *params = NULL; 3525 GHashTable *params = NULL;
3525 int len; 3526 int len;
3526 if (!(tmp = strchr(uri, ':')) || tmp == uri) { 3527 if (!(tmp = strchr(uri, ':')) || tmp == uri) {
3532 3533
3533 strncpy(proto, uri, len); 3534 strncpy(proto, uri, len);
3534 proto[len] = '\0'; 3535 proto[len] = '\0';
3535 3536
3536 tmp++; 3537 tmp++;
3537 purple_debug_info("util", "Processing message '%s' for protocol '%s'.\n", tmp, proto); 3538
3539 if (g_str_equal(proto, "xmpp"))
3540 delimiter = ';';
3541 else
3542 delimiter = '&';
3543
3544 purple_debug_info("util", "Processing message '%s' for protocol '%s' using delimiter '%c'.\n", tmp, proto, delimiter);
3538 3545
3539 if ((param_string = strchr(tmp, '?'))) { 3546 if ((param_string = strchr(tmp, '?'))) {
3540 const char *keyend = NULL, *pairstart; 3547 const char *keyend = NULL, *pairstart;
3541 char *key, *value = NULL; 3548 char *key, *value = NULL;
3542 3549
3545 3552
3546 params = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); 3553 params = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
3547 pairstart = tmp = param_string; 3554 pairstart = tmp = param_string;
3548 3555
3549 while (*tmp || *pairstart) { 3556 while (*tmp || *pairstart) {
3550 if (*tmp == '&' || !(*tmp)) { 3557 if (*tmp == delimiter || !(*tmp)) {
3551 /* If there is no explicit value */ 3558 /* If there is no explicit value */
3552 if (keyend == NULL) 3559 if (keyend == NULL)
3553 keyend = tmp; 3560 keyend = tmp;
3554 3561
3555 if (keyend && keyend != pairstart) { 3562 if (keyend && keyend != pairstart) {