comparison libpurple/util.c @ 27860:da22b6d0151e

Add support for XMPP URIs on Windows. Closes #2326.
author Paul Aurich <paul@darkrain42.org>
date Sun, 09 Aug 2009 00:15:14 +0000
parents 577bf7ea0395
children 9358464cdf6a
comparison
equal deleted inserted replaced
27859:30bde00f1909 27860:da22b6d0151e
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) {