⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nullprpl.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
  purple_debug_info("nullprpl", "removing %s from %s's buddy list\n",                    buddy->name, gc->account->username);}static void nullprpl_remove_buddies(PurpleConnection *gc, GList *buddies,                                    GList *groups) {  GList *buddy = buddies;  GList *group = groups;  purple_debug_info("nullprpl", "removing multiple buddies\n");  while (buddy && group) {    nullprpl_remove_buddy(gc, (PurpleBuddy *)buddy->data,                          (PurpleGroup *)group->data);    buddy = g_list_next(buddy);    group = g_list_next(group);  }}/* * nullprpl uses purple's local whitelist and blacklist, stored in blist.xml, as * its authoritative privacy settings, and uses purple's logic (specifically * purple_privacy_check(), from privacy.h), to determine whether messages are * allowed or blocked. */static void nullprpl_add_permit(PurpleConnection *gc, const char *name) {  purple_debug_info("nullprpl", "%s adds %s to their allowed list\n",                    gc->account->username, name);}static void nullprpl_add_deny(PurpleConnection *gc, const char *name) {  purple_debug_info("nullprpl", "%s adds %s to their blocked list\n",                    gc->account->username, name);}static void nullprpl_rem_permit(PurpleConnection *gc, const char *name) {  purple_debug_info("nullprpl", "%s removes %s from their allowed list\n",                    gc->account->username, name);}static void nullprpl_rem_deny(PurpleConnection *gc, const char *name) {  purple_debug_info("nullprpl", "%s removes %s from their blocked list\n",                    gc->account->username, name);}static void nullprpl_set_permit_deny(PurpleConnection *gc) {  /* this is for synchronizing the local black/whitelist with the server.   * for nullprpl, it's a noop.   */}static void joined_chat(PurpleConvChat *from, PurpleConvChat *to,                        int id, const char *room, gpointer userdata) {  /*  tell their chat window that we joined */  purple_debug_info("nullprpl", "%s sees that %s joined chat room %s\n",                    to->nick, from->nick, room);  purple_conv_chat_add_user(to,                            from->nick,                            NULL,   /* user-provided join message, IRC style */                            PURPLE_CBFLAGS_NONE,                            TRUE);  /* show a join message */  if (from != to) {    /* add them to our chat window */    purple_debug_info("nullprpl", "%s sees that %s is in chat room %s\n",                      from->nick, to->nick, room);    purple_conv_chat_add_user(from,                              to->nick,                              NULL,   /* user-provided join message, IRC style */                              PURPLE_CBFLAGS_NONE,                              FALSE);  /* show a join message */  }}static void nullprpl_join_chat(PurpleConnection *gc, GHashTable *components) {  char *username = gc->account->username;  char *room = g_hash_table_lookup(components, "room");  int chat_id = g_str_hash(room);  purple_debug_info("nullprpl", "%s is joining chat room %s\n", username, room);  if (!purple_find_chat(gc, chat_id)) {    serv_got_joined_chat(gc, chat_id, room);    /* tell everyone that we joined, and add them if they're already there */    foreach_gc_in_chat(joined_chat, gc, chat_id, NULL);  } else {    purple_debug_info("nullprpl", "%s is already in chat room %s\n", username,                      room);    purple_notify_info(gc,                       _("Join chat"),                       _("Join chat"),                       g_strdup_printf("%s is already in chat room %s.",                                       username, room));  }}static void nullprpl_reject_chat(PurpleConnection *gc, GHashTable *components) {  char *invited_by = g_hash_table_lookup(components, "invited_by");  char *room = g_hash_table_lookup(components, "room");  char *username = gc->account->username;  PurpleConnection *invited_by_gc = get_nullprpl_gc(invited_by);  char *message = g_strdup_printf(    "%s %s %s.",    username,    _("has rejected your invitation to join the chat room"),    room);  purple_debug_info("nullprpl",                    "%s has rejected %s's invitation to join chat room %s\n",                    username, invited_by, room);  purple_notify_info(invited_by_gc,                     _("Chat invitation rejected"),                     _("Chat invitation rejected"),                     message);}static char *nullprpl_get_chat_name(GHashTable *components) {  char *room = g_hash_table_lookup(components, "room");  purple_debug_info("nullprpl", "reporting chat room name '%s'\n", room);  return room;}static void nullprpl_chat_invite(PurpleConnection *gc, int id,                                 const char *message, const char *who) {  char *username = gc->account->username;  PurpleConversation *conv = purple_find_chat(gc, id);  char *room = conv->name;  PurpleAccount *to_acct = purple_accounts_find(who, NULLPRPL_ID);  purple_debug_info("nullprpl", "%s is inviting %s to join chat room %s\n",                    username, who, room);  if (to_acct) {    PurpleConversation *to_conv = purple_find_chat(to_acct->gc, id);    if (to_conv) {      purple_debug_info("nullprpl",                        "%s is already in chat room %s; "                        "ignoring invitation from %s\n",                        who, room, username);      purple_notify_info(gc,                         _("Chat invitation"),                         _("Chat invitation"),                         g_strdup_printf("%s is already in chat room %s.",                                         who, room));    } else {      GHashTable *components;      components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free);      g_hash_table_replace(components, "room", g_strdup(room));      g_hash_table_replace(components, "invited_by", g_strdup(username));      serv_got_chat_invite(to_acct->gc, room, username, message, components);    }  }}static void left_chat_room(PurpleConvChat *from, PurpleConvChat *to,                           int id, const char *room, gpointer userdata) {  if (from != to) {    /*  tell their chat window that we left */    purple_debug_info("nullprpl", "%s sees that %s left chat room %s\n",                      to->nick, from->nick, room);    purple_conv_chat_remove_user(to,                                 from->nick,                                 NULL);  /* user-provided message, IRC style */  }}static void nullprpl_chat_leave(PurpleConnection *gc, int id) {  PurpleConversation *conv = purple_find_chat(gc, id);  purple_debug_info("nullprpl", "%s is leaving chat room %s\n",                    gc->account->username, conv->name);  /* tell everyone that we left */  foreach_gc_in_chat(left_chat_room, gc, id, NULL);}static PurpleCmdRet send_whisper(PurpleConversation *conv, const gchar *cmd,                                 gchar **args, gchar **error, void *userdata) {  const char *to_username;  const char *message;  const char *from_username;  PurpleConvChat *chat;  PurpleConvChatBuddy *chat_buddy;  PurpleConnection *to;  /* parse args */  to_username = args[0];  message = args[1];  if (!to_username || strlen(to_username) == 0) {    *error = g_strdup(_("Whisper is missing recipient."));    return PURPLE_CMD_RET_FAILED;  } else if (!message || strlen(message) == 0) {    *error = g_strdup(_("Whisper is missing message."));    return PURPLE_CMD_RET_FAILED;  }  from_username = conv->account->username;  purple_debug_info("nullprpl", "%s whispers to %s in chat room %s: %s\n",                    from_username, to_username, conv->name, message);  chat = purple_conversation_get_chat_data(conv);  chat_buddy = purple_conv_chat_cb_find(chat, to_username);  to = get_nullprpl_gc(to_username);  if (!chat_buddy) {    /* this will be freed by the caller */    *error = g_strdup_printf(_("%s is not logged in."), to_username);    return PURPLE_CMD_RET_FAILED;  } else if (!to) {    *error = g_strdup_printf(_("%s is not in this chat room."), to_username);    return PURPLE_CMD_RET_FAILED;  } else {    /* write the whisper in the sender's chat window  */    char *message_to = g_strdup_printf("%s (to %s)", message, to_username);    purple_conv_chat_write(chat, from_username, message_to,                           PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_WHISPER,                           time(NULL));    g_free(message_to);    /* send the whisper */    serv_chat_whisper(to, chat->id, from_username, message);    return PURPLE_CMD_RET_OK;  }}static void nullprpl_chat_whisper(PurpleConnection *gc, int id, const char *who,                                  const char *message) {  char *username = gc->account->username;  PurpleConversation *conv = purple_find_chat(gc, id);  purple_debug_info("nullprpl",                    "%s receives whisper from %s in chat room %s: %s\n",                    username, who, conv->name, message);  /* receive whisper on recipient's account */  serv_got_chat_in(gc, id, who, PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_WHISPER,                   message, time(NULL));}static void receive_chat_message(PurpleConvChat *from, PurpleConvChat *to,                                 int id, const char *room, gpointer userdata) {  const char *message = (const char *)userdata;  PurpleConnection *to_gc = get_nullprpl_gc(to->nick);  purple_debug_info("nullprpl",                    "%s receives message from %s in chat room %s: %s\n",                    to->nick, from->nick, room, message);  serv_got_chat_in(to_gc, id, from->nick, PURPLE_MESSAGE_RECV, message,                   time(NULL));}static int nullprpl_chat_send(PurpleConnection *gc, int id, const char *message,                              PurpleMessageFlags flags) {  char *username = gc->account->username;  PurpleConversation *conv = purple_find_chat(gc, id);  if (conv) {    purple_debug_info("nullprpl",                      "%s is sending message to chat room %s: %s\n", username,                      conv->name, message);    /* send message to everyone in the chat room */    foreach_gc_in_chat(receive_chat_message, gc, id, (gpointer)message);    return 0;  } else {    purple_debug_info("nullprpl",                      "tried to send message from %s to chat room #%d: %s\n"                      "but couldn't find chat room",                      username, id, message);    return -1;  }}static void nullprpl_register_user(PurpleAccount *acct) { purple_debug_info("nullprpl", "registering account for %s\n",                   acct->username);}static void nullprpl_get_cb_info(PurpleConnection *gc, int id, const char *who) {  PurpleConversation *conv = purple_find_chat(gc, id);  purple_debug_info("nullprpl",                    "retrieving %s's info for %s in chat room %s\n", who,                    gc->account->username, conv->name);  nullprpl_get_info(gc, who);}static void nullprpl_alias_buddy(PurpleConnection *gc, const char *who,                                 const char *alias) { purple_debug_info("nullprpl", "%s sets %'s alias to %s\n",                   gc->account->username, who, alias);}static void nullprpl_group_buddy(PurpleConnection *gc, const char *who,                                 const char *old_group,                                 const char *new_group) {  purple_debug_info("nullprpl", "%s has moved %s from group %s to group %s\n",                    who, old_group, new_group);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -