Changeset b8c336b
- Timestamp:
- 2015-05-09T19:50:30Z (10 years ago)
- Children:
- ec8b369
- Parents:
- 356e2dd (diff), 5014380 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
bitlbee.h
r356e2dd rb8c336b 93 93 #undef g_source_remove 94 94 #define g_source_remove __PLEASE_USE_B_EVENT_REMOVE__ 95 #undef g_source_remove_by_user_data96 #define g_source_remove_by_user_data __PLEASE_USE_B_SOURCE_REMOVE_BY_USER_DATA__97 95 #undef g_main_run 98 96 #define g_main_run __PLEASE_USE_B_MAIN_RUN__ -
configure
r356e2dd rb8c336b 56 56 GLIB_MIN_VERSION=2.16 57 57 58 echo BitlBee configure59 60 58 # Cygwin and Darwin don't support PIC/PIE 61 59 case "$arch" in … … 65 63 pie=0;; 66 64 esac 65 66 get_version() { 67 REAL_BITLBEE_VERSION=$(grep '^#define BITLBEE_VERSION ' $srcdir/bitlbee.h | sed 's/.*\"\(.*\)\".*/\1/') 68 69 if [ -n "$BITLBEE_VERSION" ]; then 70 # environment variable already set to something to spoof it 71 # don't replace it with the git stuff 72 return 73 fi 74 75 BITLBEE_VERSION=$REAL_BITLBEE_VERSION 76 77 if [ -d $srcdir/.git ] && type git > /dev/null 2> /dev/null; then 78 timestamp=$(cd $srcdir; git show -s --format=%ci HEAD | sed 's/ .*$//; s/-//g') 79 branch=$(cd $srcdir; git rev-parse --abbrev-ref HEAD) 80 81 search="(.+)-([0-9]+)-(g[0-9a-f]+)" 82 replace="\1+$timestamp+$branch+\2-\3-git" 83 84 BITLBEE_VERSION=$(cd $srcdir; git describe --long --tags | sed -r "s/$search/$replace/") 85 86 unset timestamp branch search replace 87 fi 88 } 89 90 if [ "$1" = "--dump-version" ]; then 91 srcdir=$(cd $(dirname $0);pwd) 92 get_version 93 echo $BITLBEE_VERSION 94 exit 95 fi 96 97 echo BitlBee configure 67 98 68 99 while [ -n "$1" ]; do … … 672 703 fi 673 704 674 REAL_BITLBEE_VERSION=`grep '^#define BITLBEE_VERSION ' $srcdir/bitlbee.h | sed 's/.*\"\(.*\)\".*/\1/'` 675 echo 676 if [ -z "$BITLBEE_VERSION" -a -d .bzr ] && type bzr > /dev/null 2> /dev/null; then 677 nick=`bzr nick` 678 if [ -n "$nick" -a "$nick" != "bitlbee" ]; then 679 nick="-$nick" 680 else 681 nick="" 682 fi 683 rev=`bzr revno` 684 echo 'Using bzr revision #'$rev' as version number' 685 BITLBEE_VERSION=$REAL_BITLBEE_VERSION-bzr$nick-$rev 686 fi 687 688 if [ -z "$BITLBEE_VERSION" -a -d .git ] && type git > /dev/null 2> /dev/null; then 689 rev=`git describe --long --tags`-`git rev-parse --abbrev-ref HEAD` 690 echo 'Using '$rev' as git version number' 691 BITLBEE_VERSION=$rev-git 692 fi 693 694 if [ -n "$BITLBEE_VERSION" ]; then 705 get_version 706 707 if [ "$BITLBEE_VERSION" != "$REAL_BITLBEE_VERSION" ]; then 695 708 echo 'Spoofing version number: '$BITLBEE_VERSION 696 709 echo '#undef BITLBEE_VERSION' >> config.h 697 710 echo '#define BITLBEE_VERSION "'$BITLBEE_VERSION'"' >> config.h 698 711 echo 699 else700 # for pkg-config701 BITLBEE_VERSION=$REAL_BITLBEE_VERSION702 712 fi 703 713 -
debian/control
r356e2dd rb8c336b 22 22 Architecture: any 23 23 Depends: ${misc:Depends}, ${shlibs:Depends}, debianutils (>= 1.16), bitlbee-common (= ${source:Version}) 24 Provides: bitlbee 24 25 Conflicts: bitlbee 25 26 Replaces: bitlbee -
doc/user-guide/commands.xml
r356e2dd rb8c336b 121 121 <description> 122 122 <para> 123 This command sdeletes an account from your account list. You should signoff the account before deleting it.123 This command deletes an account from your account list. You should signoff the account before deleting it. 124 124 </para> 125 125 … … 853 853 <varlistentry><term>favourite <screenname|#id></term><listitem><para>Favo<emphasis>u</emphasis>rite the given user's most recent tweet, or the given tweet ID.</para></listitem></varlistentry> 854 854 <varlistentry><term>post <message></term><listitem><para>Post a tweet</para></listitem></varlistentry> 855 <varlistentry><term>url <screenname|#id></term><listitem><para>Show URL for a tweet to open it in a browser (and see context)</para></listitem></varlistentry> 855 856 </variablelist> 856 857 -
irc_im.c
r356e2dd rb8c336b 50 50 51 51 memset(nick, 0, MAX_NICK_LENGTH + 1); 52 str cpy(nick, nick_get(bu));52 strncpy(nick, nick_get(bu), MAX_NICK_LENGTH); 53 53 54 54 bu->ui_data = iu = irc_user_new(irc, nick); … … 752 752 g_free(channel); 753 753 channel = s; 754 } else { 755 g_free(s); 754 756 } 755 757 } -
irc_send.c
r356e2dd rb8c336b 175 175 176 176 if (iu == irc->user) { 177 irc_write(irc, ":%s MODE %s +%s", irc->root->host, ic->name, ic->mode);178 irc_send_names(ic);179 177 if (ic->topic && *ic->topic) { 180 178 irc_send_topic(ic, FALSE); 181 179 } 180 irc_send_names(ic); 182 181 } 183 182 } -
lib/events_glib.c
r356e2dd rb8c336b 82 82 } 83 83 84 event_debug("gaim_io_invoke( %d, %d, 0x%x)\n", g_io_channel_unix_get_fd(source), condition, data);84 event_debug("gaim_io_invoke( %d, %d, %p )\n", g_io_channel_unix_get_fd(source), condition, data); 85 85 86 86 st = closure->function(closure->data, g_io_channel_unix_get_fd(source), gaim_cond); … … 101 101 static void gaim_io_destroy(gpointer data) 102 102 { 103 event_debug("gaim_io_destroy( 0 x%x)\n", data);103 event_debug("gaim_io_destroy( 0%p )\n", data); 104 104 g_free(data); 105 105 } … … 127 127 gaim_io_invoke, closure, gaim_io_destroy); 128 128 129 event_debug("b_input_add( %d, %d, 0x%x, 0x%x) = %d (%p)\n", source, condition, function, data, st, closure);129 event_debug("b_input_add( %d, %d, %p, %p ) = %d (%p)\n", source, condition, function, data, st, closure); 130 130 131 131 g_io_channel_unref(channel); … … 140 140 gint st = g_timeout_add(timeout, (GSourceFunc) func, data); 141 141 142 event_debug("b_timeout_add( %d, % d, %d) = %d\n", timeout, func, data, st);142 event_debug("b_timeout_add( %d, %p, %p ) = %d\n", timeout, func, data, st); 143 143 144 144 return st; -
lib/oauth.c
r356e2dd rb8c336b 96 96 { 97 97 int key_len = strlen(key); 98 GSList *l ;98 GSList *l, *n; 99 99 100 100 if (!params) { … … 102 102 } 103 103 104 for (l = *params; l; l = l->next) { 104 for (l = *params; l; l = n) { 105 n = l->next; 105 106 char *data = l->data; 106 107 -
lib/oauth2.c
r356e2dd rb8c336b 140 140 struct oauth2_access_token_data *cb_data = req->data; 141 141 char *atoken = NULL, *rtoken = NULL, *error = NULL; 142 char *content_type ;142 char *content_type = NULL; 143 143 144 if (getenv("BITLBEE_DEBUG") && req->reply_body) { 144 if (req->status_code <= 0 && !req->reply_body) { 145 cb_data->func(cb_data->data, NULL, NULL, req->status_string); 146 g_free(cb_data); 147 return; 148 } 149 150 if (getenv("BITLBEE_DEBUG")) { 145 151 printf("%s\n", req->reply_body); 146 152 } -
protocols/jabber/hipchat.c
r356e2dd rb8c336b 47 47 jd->flags &= ~JFLAG_STREAM_RESTART; 48 48 49 if (!jabber_get_roster(ic)) { 50 return XT_ABORT; 51 } 52 if (!jabber_iq_disco_server(ic)) { 53 return XT_ABORT; 54 } 55 if (!jabber_get_hipchat_profile(ic)) { 56 return XT_ABORT; 57 } 58 if (!jabber_iq_disco_muc(ic, muc_host)) { 49 if (!jabber_get_roster(ic) || 50 !jabber_iq_disco_server(ic) || 51 !jabber_get_hipchat_profile(ic) || 52 !jabber_iq_disco_muc(ic, muc_host)) { 59 53 return XT_ABORT; 60 54 } … … 84 78 { 85 79 struct xt_node *query, *name_node; 86 87 //char *name;88 80 89 81 if (!(query = xt_find_node(node->children, "query"))) { -
protocols/jabber/iq.c
r356e2dd rb8c336b 373 373 static xt_status jabber_parse_roster(struct im_connection *ic, struct xt_node *node, struct xt_node *orig) 374 374 { 375 struct jabber_data *jd = ic->proto_data; 375 376 struct xt_node *query, *c; 376 377 int initial = (orig != NULL); … … 388 389 char *sub = xt_find_attr(c, "subscription"); 389 390 char *mention_name = xt_find_attr(c, "mention_name"); 390 char *nick = mention_name ? : name;391 391 392 392 if (jid && sub) { … … 399 399 } 400 400 401 if (nick) { 402 imcb_buddy_nick_hint(ic, jid, nick); 401 /* This could also be used to set the full name as nick for fb/gtalk, 402 * but i'm keeping the old (ugly?) default behavior just to be safe */ 403 if (mention_name && (jd->flags & JFLAG_HIPCHAT)) { 404 imcb_buddy_nick_hint(ic, jid, mention_name); 403 405 } 404 406 } else if (strcmp(sub, "remove") == 0) { -
protocols/jabber/jabber.c
r356e2dd rb8c336b 428 428 } 429 429 430 jabber_get_vcard(ic, bud ? bud->full_jid :who);430 jabber_get_vcard(ic, who); 431 431 } 432 432 -
protocols/msn/gw.c
r356e2dd rb8c336b 87 87 gw->polling = FALSE; 88 88 89 if (req->status_code != 200 || !req->reply_body) { 90 gw->callback(gw->md, -1, B_EV_IO_READ); 91 return; 92 } 93 89 94 if (getenv("BITLBEE_DEBUG")) { 90 95 fprintf(stderr, "\n\x1b[90mHTTP:%s\n", req->reply_body); 91 96 fprintf(stderr, "\n\x1b[97m\n"); 92 }93 94 if (req->status_code != 200) {95 gw->callback(gw->md, -1, B_EV_IO_READ);96 return;97 97 } 98 98 … … 113 113 if (req->body_size) { 114 114 g_byte_array_append(gw->in, (const guint8 *) req->reply_body, req->body_size); 115 gw->callback(gw->md, -1, B_EV_IO_READ); 115 116 if (!gw->callback(gw->md, -1, B_EV_IO_READ)) { 117 return; 118 } 116 119 } 117 120 -
protocols/msn/ns.c
r356e2dd rb8c336b 181 181 imcb_error(ic, "Error while reading from server"); 182 182 imc_logout(ic, TRUE); 183 g_free(bytes); 183 184 return FALSE; 184 185 } … … 188 189 g_free(bytes); 189 190 190 /* Ignore ret == 0, it's already disconnected then. */ 191 msn_handler(md); 192 193 return TRUE; 194 191 return msn_handler(md); 195 192 } 196 193 -
protocols/oscar/ssi.c
r356e2dd rb8c336b 66 66 newitem->gid += 0x0001; 67 67 for (cur = *list, i = 0; ((cur) && (!i)); cur = cur->next) { 68 if ((cur-> gid == newitem->gid) && (cur->gid == newitem->gid)) {68 if ((cur->bid == newitem->bid) && (cur->gid == newitem->gid)) { 69 69 i = 1; 70 70 } -
protocols/twitter/twitter.c
r356e2dd rb8c336b 483 483 } 484 484 485 static gboolean twitter_length_check(struct im_connection *ic, gchar * msg) 486 { 487 int max = set_getint(&ic->acc->set, "message_length"), len; 488 int target_len = set_getint(&ic->acc->set, "target_url_length"); 485 int twitter_message_len(gchar *msg, int target_len) 486 { 489 487 int url_len_diff = 0; 490 488 … … 493 491 } 494 492 495 if (max == 0 || (len = g_utf8_strlen(msg, -1) + url_len_diff) <= max) { 493 return g_utf8_strlen(msg, -1) + url_len_diff; 494 } 495 496 static gboolean twitter_length_check(struct im_connection *ic, gchar * msg) 497 { 498 int max = set_getint(&ic->acc->set, "message_length"); 499 int target_len = set_getint(&ic->acc->set, "target_url_length"); 500 int len = twitter_message_len(msg, target_len); 501 502 if (max == 0 || len <= max) { 496 503 return TRUE; 497 504 } … … 867 874 } 868 875 876 bee_user_t twitter_log_local_user; 877 869 878 /** Convert the given bitlbee tweet ID, bitlbee username, or twitter tweet ID 870 879 * into a twitter tweet ID. … … 897 906 bu = td->log[id].bu; 898 907 id = td->log[id].id; 899 /* Beware of dangling pointers! */900 if (!g_slist_find(ic->bee->users, bu)) {901 bu = NULL;902 }903 908 } else if (twitter_parse_id(arg, 10, &id)) { 904 909 /* Allow normal tweet IDs as well; not a very useful … … 911 916 } 912 917 if (bu_) { 918 if (bu == &twitter_log_local_user) { 919 /* HACK alert. There's no bee_user object for the local 920 * user so just fake one for the few cmds that need it. */ 921 twitter_log_local_user.handle = td->user; 922 } else { 923 /* Beware of dangling pointers! */ 924 if (!g_slist_find(ic->bee->users, bu)) { 925 bu = NULL; 926 } 927 } 913 928 *bu_ = bu; 914 929 } … … 1003 1018 in_reply_to = id; 1004 1019 allow_post = TRUE; 1020 } else if (g_strcasecmp(cmd[0], "url") == 0) { 1021 id = twitter_message_id_from_command_arg(ic, cmd[1], &bu); 1022 if (!id) { 1023 twitter_log(ic, "Tweet `%s' does not exist", cmd[1]); 1024 } else { 1025 /* More common link is twitter.com/$UID/status/$ID (and that's 1026 * what this will 302 to) but can't generate that since for RTs, 1027 * bu here points at the retweeter while id contains the id of 1028 * the original message. */ 1029 twitter_log(ic, "https://twitter.com/statuses/%lld", id); 1030 } 1031 goto eof; 1032 1005 1033 } else if (g_strcasecmp(cmd[0], "post") == 0) { 1006 1034 message += 5; -
protocols/twitter/twitter.h
r356e2dd rb8c336b 101 101 struct twitter_log_data { 102 102 guint64 id; 103 struct bee_user *bu; /* DANGER: can be a dead pointer. Check it first. */ 103 /* DANGER: bu can be a dead pointer. Check it first. 104 * twitter_message_id_from_command_arg() will do this. */ 105 struct bee_user *bu; 104 106 }; 105 107 … … 110 112 */ 111 113 extern GSList *twitter_connections; 114 115 /** 116 * Evil hack: Fake bee_user which will always point at the local user. 117 * Sometimes used as a return value by twitter_message_id_from_command_arg. 118 * NOT thread safe but don't you dare to even think of ever making BitlBee 119 * threaded. :-) 120 */ 121 extern bee_user_t twitter_log_local_user; 112 122 113 123 void twitter_login_finish(struct im_connection *ic); -
protocols/twitter/twitter_lib.c
r356e2dd rb8c336b 460 460 #endif 461 461 462 static char* expand_entities(char* text, const json_value *entities);462 static void expand_entities(char **text, const json_value *node); 463 463 464 464 /** … … 473 473 { 474 474 struct twitter_xml_status *txs; 475 const json_value *rt = NULL , *entities = NULL;475 const json_value *rt = NULL; 476 476 477 477 if (node->type != json_object) { … … 501 501 } else if (strcmp("in_reply_to_status_id", k) == 0 && v->type == json_integer) { 502 502 txs->reply_to = v->u.integer; 503 } else if (strcmp("entities", k) == 0 && v->type == json_object) {504 entities = v;505 503 } 506 504 } … … 516 514 txs_free(rtxs); 517 515 } 518 } else if (entities){519 txs->text = expand_entities(txs->text, entities);516 } else { 517 expand_entities(&txs->text, node); 520 518 } 521 519 … … 534 532 { 535 533 struct twitter_xml_status *txs; 536 const json_value *entities = NULL;537 534 538 535 if (node->type != json_object) { … … 561 558 } 562 559 563 if (entities) { 564 txs->text = expand_entities(txs->text, entities); 565 } 560 expand_entities(&txs->text, node); 566 561 567 562 if (txs->text && txs->user && txs->id) { … … 573 568 } 574 569 575 static char* expand_entities(char* text, const json_value *entities) 576 { 570 static void expand_entities(char **text, const json_value *node) 571 { 572 json_value *entities, *quoted; 573 char *quote_url = NULL, *quote_text = NULL; 574 575 if (!((entities = json_o_get(node, "entities")) && entities->type == json_object)) 576 return; 577 if ((quoted = json_o_get(node, "quoted_status")) && quoted->type == json_object) { 578 /* New "retweets with comments" feature. Note that this info 579 * seems to be included in the streaming API only! Grab the 580 * full message and try to insert it when we run into the 581 * Tweet entity. */ 582 struct twitter_xml_status *txs = twitter_xt_get_status(quoted); 583 quote_text = g_strdup_printf("@%s: %s", txs->user->screen_name, txs->text); 584 quote_url = g_strdup_printf("%s/status/%" G_GUINT64_FORMAT, txs->user->screen_name, txs->id); 585 txs_free(txs); 586 } else { 587 quoted = NULL; 588 } 589 577 590 JSON_O_FOREACH(entities, k, v) { 578 591 int i; … … 586 599 587 600 for (i = 0; i < v->u.array.length; i++) { 601 const char *format = "%s%s <%s>%s"; 602 588 603 if (v->u.array.values[i]->type != json_object) { 589 604 continue; … … 592 607 const char *kort = json_o_str(v->u.array.values[i], "url"); 593 608 const char *disp = json_o_str(v->u.array.values[i], "display_url"); 609 const char *full = json_o_str(v->u.array.values[i], "expanded_url"); 594 610 char *pos, *new; 595 611 596 if (!kort || !disp || !(pos = strstr( text, kort))) {612 if (!kort || !disp || !(pos = strstr(*text, kort))) { 597 613 continue; 598 614 } 615 if (quote_url && strstr(full, quote_url)) { 616 format = "%s<%s> [%s]%s"; 617 disp = quote_text; 618 } 599 619 600 620 *pos = '\0'; 601 new = g_strdup_printf( "%s%s <%s>%s",text, kort,621 new = g_strdup_printf(format, *text, kort, 602 622 disp, pos + strlen(kort)); 603 623 604 g_free( text);605 text = new;606 } 607 } 608 609 return text;624 g_free(*text); 625 *text = new; 626 } 627 } 628 g_free(quote_text); 629 g_free(quote_url); 610 630 } 611 631 … … 681 701 if (g_strcasecmp(txs->user->screen_name, td->user) == 0) { 682 702 td->log[td->log_id].id = txs->rt_id; 703 /* More useful than NULL. */ 704 td->log[td->log_id].bu = &twitter_log_local_user; 683 705 } 684 706 -
protocols/yahoo/yahoo2.h
r356e2dd rb8c336b 33 33 #undef malloc 34 34 #define malloc(x) g_malloc(x) 35 #undef calloc36 #define calloc(x, y) g_calloc(x, y)37 35 #undef realloc 38 36 #define realloc(x, y) g_realloc(x, y) -
unix.c
r356e2dd rb8c336b 212 212 argv[0], argv[0], argv[0], argv[0], argv[0]); 213 213 } else if (strcmp(argv[2], "enc") == 0) { 214 pass_len = arc_encode(argv[4], strlen(argv[4]), (unsigned char **) &pass_cr, argv[3], 12); 215 printf("%s\n", base64_encode(pass_cr, pass_len)); 214 char *encoded; 215 216 pass_len = arc_encode(argv[4], strlen(argv[4]), &pass_cr, argv[3], 12); 217 218 encoded = base64_encode(pass_cr, pass_len); 219 printf("%s\n", encoded); 220 g_free(encoded); 221 g_free(pass_cr); 216 222 } else if (strcmp(argv[2], "dec") == 0) { 217 pass_len = base64_decode(argv[4], (unsigned char **)&pass_cr);223 pass_len = base64_decode(argv[4], &pass_cr); 218 224 arc_decode(pass_cr, pass_len, (char **) &pass_cl, argv[3]); 219 225 printf("%s\n", pass_cl); 226 227 g_free(pass_cr); 228 g_free(pass_cl); 220 229 } else if (strcmp(argv[2], "hash") == 0) { 221 230 md5_byte_t pass_md5[21]; 222 231 md5_state_t md5_state; 232 char *encoded; 223 233 224 234 random_bytes(pass_md5 + 16, 5); … … 228 238 md5_finish(&md5_state, pass_md5); 229 239 230 printf("%s\n", base64_encode(pass_md5, 21)); 240 encoded = base64_encode(pass_md5, 21); 241 printf("%s\n", encoded); 242 g_free(encoded); 231 243 } else if (strcmp(argv[2], "unhash") == 0) { 232 244 printf("Hash %s submitted to a massive Beowulf cluster of\n"
Note: See TracChangeset
for help on using the changeset viewer.