annotate src/protocols/bonjour/bonjour.c @ 11837:fa742ad8068c

[gaim-migrate @ 14128] Don't pass our active GaimStatus to the login PRPL callback... It's not used by most PRPLS, and that ones that DO use it probably shouldn't. Ideally the PRPLs won't store any info about their own status, message, etc. All that should be in the core status API, and when it needs some info it should query the core to get it. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Wed, 26 Oct 2005 05:40:02 +0000
parents 36c2e09c2cf9
children 216a05e0a6f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1 /*
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
2 * gaim - Bonjour Protocol Plugin
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
3 *
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
6 * source distribution.
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
7 *
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
11 * (at your option) any later version.
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
12 *
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
16 * GNU General Public License for more details.
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
17 *
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
21 */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
22 #include <glib.h>
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
23
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
24 #include "internal.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
25 #include "account.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
26 #include "accountopt.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
27 #include "version.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
28 #include "debug.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
29
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
30 #include "bonjour.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
31 #include "dns_sd.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
32 #include "jabber.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
33 #include "buddy.h"
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
34
11691
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
35 static void
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
36 bonjour_removeallfromlocal(GaimConnection *gc)
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
37 {
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
38 GaimAccount *account = gaim_connection_get_account(gc);
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
39 GaimBuddyList *blist;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
40 GaimBlistNode *gnode, *cnode, *bnode;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
41 GaimBuddy *buddy;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
42
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
43 blist = gaim_get_blist();
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
44 if (blist == NULL)
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
45 return;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
46
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
47 /* Go through and remove all buddies that belong to this account */
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
48 for (gnode = blist->root; gnode; gnode = gnode->next)
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
49 {
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
50 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
51 continue;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
52 for (cnode = gnode->child; cnode; cnode = cnode->next)
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
53 {
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
54 if (!GAIM_BLIST_NODE_IS_CONTACT(cnode))
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
55 continue;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
56 for (bnode = cnode->child; bnode; bnode = bnode->next)
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
57 {
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
58 if (!GAIM_BLIST_NODE_IS_BUDDY(bnode))
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
59 continue;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
60 buddy = (GaimBuddy *)bnode;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
61 if (buddy->account != account)
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
62 continue;
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
63 gaim_prpl_got_user_status(account, buddy->name, "offline", NULL);
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
64 gaim_blist_remove_buddy(buddy);
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
65 }
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
66 }
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
67 }
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
68 }
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
69
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
70 void
11837
fa742ad8068c [gaim-migrate @ 14128]
Mark Doliner <mark@kingant.net>
parents: 11835
diff changeset
71 bonjour_login(GaimAccount *account)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
72 {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
73 GaimConnection *gc = gaim_account_get_connection(account);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
74 GaimGroup *bonjour_group = NULL;
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
75 BonjourData *bd = NULL;
11837
fa742ad8068c [gaim-migrate @ 14128]
Mark Doliner <mark@kingant.net>
parents: 11835
diff changeset
76 GaimStatus *status;
11834
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
77 GaimPresence *presence;
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
78
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
79 gc->flags |= GAIM_CONNECTION_HTML;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
80 gc->proto_data = g_new(BonjourData, 1);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
81 bd = gc->proto_data;
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
82
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
83 /* Start waiting for jabber connections (iChat style) */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
84 bd->jabber_data = g_new(BonjourJabber, 1);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
85 bd->jabber_data->name = gc->account->username;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
86 bd->jabber_data->port = gaim_account_get_int(account, "port", BONJOUR_DEFAULT_PORT_INT);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
87 bd->jabber_data->account = account;
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
88
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
89 if (bonjour_jabber_start(bd->jabber_data) == -1) {
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
90 /* Send a message about the connection error */
11834
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
91 gaim_debug_error("bonjour", "Unable to listen to iChat connections");
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
92
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
93 /* Free the data */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
94 g_free(bd->jabber_data);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
95 g_free(bd);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
96 return;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
97 }
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
98
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
99 /* Connect to the mDNS daemon looking for buddies in the LAN */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
100 bd->dns_sd_data = bonjour_dns_sd_new();
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
101 bd->dns_sd_data->name = (sw_string)gaim_account_get_username(account);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
102 bd->dns_sd_data->txtvers = g_strdup("1");
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
103 bd->dns_sd_data->version = g_strdup("1");
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
104 bd->dns_sd_data->first = g_strdup(gaim_account_get_string(account, "first", "TODO"));
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
105 bd->dns_sd_data->last = g_strdup(gaim_account_get_string(account, "last", ""));
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
106 bd->dns_sd_data->port_p2pj = gaim_account_get_int(account, "port", BONJOUR_DEFAULT_PORT_INT);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
107 bd->dns_sd_data->phsh = g_strdup("");
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
108 bd->dns_sd_data->email = g_strdup(gaim_account_get_string(account, "email", ""));
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
109 bd->dns_sd_data->vc = g_strdup("");
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
110 bd->dns_sd_data->jid = g_strdup("");
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
111 bd->dns_sd_data->AIM = g_strdup("");
11834
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
112
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
113 status = gaim_account_get_active_status(account);
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
114 presence = gaim_account_get_presence(account);
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
115 if (gaim_presence_is_available(presence))
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
116 bd->dns_sd_data->status = g_strdup("avail");
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
117 else if (gaim_presence_is_idle(presence))
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
118 bd->dns_sd_data->status = g_strdup("away");
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
119 else
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
120 bd->dns_sd_data->status = g_strdup("dnd");
825d3ca6ffcd [gaim-migrate @ 14125]
Mark Doliner <mark@kingant.net>
parents: 11829
diff changeset
121 bd->dns_sd_data->msg = g_strdup(gaim_status_get_attr_string(status, "message"));
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
122
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
123 bd->dns_sd_data->account = account;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
124 bonjour_dns_sd_start(bd->dns_sd_data);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
125
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
126 /* Create a group for bonjour buddies */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
127 bonjour_group = gaim_group_new(BONJOUR_GROUP_NAME);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
128 gaim_blist_add_group(bonjour_group, NULL);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
129
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
130 /* Show the buddy list by telling Gaim we have already connected */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
131 gaim_connection_set_state(gc, GAIM_CONNECTED);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
132 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
133
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
134 void
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
135 bonjour_close(GaimConnection *connection)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
136 {
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
137 GaimGroup *bonjour_group = gaim_find_group(BONJOUR_GROUP_NAME);
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
138 BonjourData *bd = (BonjourData*)connection->proto_data;
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
139
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
140 /* Stop looking for buddies in the LAN */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
141 if (connection != NULL) {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
142 bonjour_dns_sd_stop(bd->dns_sd_data);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
143 if (bd != NULL) {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
144 bonjour_dns_sd_free(bd->dns_sd_data);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
145 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
146 }
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
147
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
148 /* Stop waiting for conversations */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
149 bonjour_jabber_stop(bd->jabber_data);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
150 g_free(bd->jabber_data);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
151
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
152 /* Remove all the bonjour buddies */
11691
739d6376dec2 [gaim-migrate @ 13977]
Mark Doliner <mark@kingant.net>
parents: 11539
diff changeset
153 bonjour_removeallfromlocal(connection);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
154
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
155 /* Delete the bonjour group */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
156 gaim_blist_remove_group(bonjour_group);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
157
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
158 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
159
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
160 const char *
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
161 bonjour_list_icon(GaimAccount *account, GaimBuddy *buddy)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
162 {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
163 return BONJOUR_ICON_NAME;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
164 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
165
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
166 int
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
167 bonjour_send_im(GaimConnection *connection, const char *to, const char *msg, GaimConvImFlags flags)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
168 {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
169 if(!to || !msg)
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
170 return 0;
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
171
11693
b91a84e7cbcb [gaim-migrate @ 13979]
Mark Doliner <mark@kingant.net>
parents: 11691
diff changeset
172 return bonjour_jabber_send_message(((BonjourData*)(connection->proto_data))->jabber_data, to, msg);
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
173 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
174
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
175 void
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
176 bonjour_set_status(GaimAccount *account, GaimStatus *status)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
177 {
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
178 GaimConnection *gc;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
179 BonjourData *bd;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
180 gboolean disconnected;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
181 GaimStatusType *type;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
182 int primitive;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
183 GaimPresence *presence;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
184 const char *message, *bonjour_status;
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
185
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
186 disconnected = gaim_account_is_disconnected(account);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
187 type = gaim_status_get_type(status);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
188 primitive = gaim_status_type_get_primitive(type);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
189 presence = gaim_account_get_presence(account);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
190
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
191 if (!gaim_account_is_connected(account))
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
192 /* TODO: Does this mean we're connecting? */
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
193 return;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
194
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
195 message = gaim_status_get_attr_string(status, "message");
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
196 if (message == NULL)
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
197 message = "";
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
198
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
199 /*
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
200 * The three possible status for Bonjour are
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
201 * -available ("avail")
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
202 * -idle ("away")
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
203 * -away ("dnd")
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
204 * Each of them can have an optional message.
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
205 */
11835
36c2e09c2cf9 [gaim-migrate @ 14126]
Mark Doliner <mark@kingant.net>
parents: 11834
diff changeset
206 if (gaim_presence_is_available(presence))
36c2e09c2cf9 [gaim-migrate @ 14126]
Mark Doliner <mark@kingant.net>
parents: 11834
diff changeset
207 bd->dns_sd_data->status = g_strdup("avail");
36c2e09c2cf9 [gaim-migrate @ 14126]
Mark Doliner <mark@kingant.net>
parents: 11834
diff changeset
208 else if (gaim_presence_is_idle(presence))
36c2e09c2cf9 [gaim-migrate @ 14126]
Mark Doliner <mark@kingant.net>
parents: 11834
diff changeset
209 bd->dns_sd_data->status = g_strdup("away");
36c2e09c2cf9 [gaim-migrate @ 14126]
Mark Doliner <mark@kingant.net>
parents: 11834
diff changeset
210 else
36c2e09c2cf9 [gaim-migrate @ 14126]
Mark Doliner <mark@kingant.net>
parents: 11834
diff changeset
211 bd->dns_sd_data->status = g_strdup("dnd");
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
212
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
213 gc = gaim_account_get_connection(account);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
214 bd = gc->proto_data;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
215 bonjour_dns_sd_send_status(bd->dns_sd_data, bonjour_status, message);
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
216 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
217
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
218 static GList *
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
219 bonjour_status_types(GaimAccount *account)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
220 {
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
221 GList *status_types = NULL;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
222 GaimStatusType *type;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
223
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
224 g_return_val_if_fail(account != NULL, NULL);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
225
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
226 type = gaim_status_type_new_full(GAIM_STATUS_OFFLINE,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
227 BONJOUR_STATUS_ID_OFFLINE,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
228 _("Offline"), TRUE, TRUE, FALSE);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
229 status_types = g_list_append(status_types, type);
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
230
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
231 type = gaim_status_type_new_with_attrs(GAIM_STATUS_AVAILABLE,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
232 BONJOUR_STATUS_ID_AVAILABLE,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
233 _("Available"), TRUE, TRUE, FALSE,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
234 "message", _("Message"),
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
235 gaim_value_new(GAIM_TYPE_STRING), NULL);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
236 status_types = g_list_append(status_types, type);
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
237
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
238 type = gaim_status_type_new_with_attrs(GAIM_STATUS_AWAY,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
239 BONJOUR_STATUS_ID_AWAY,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
240 _("Away"), TRUE, TRUE, FALSE,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
241 "message", _("Message"),
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
242 gaim_value_new(GAIM_TYPE_STRING), NULL);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
243 status_types = g_list_append(status_types, type);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
244
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
245 return status_types;
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
246 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
247
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
248 static void
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
249 bonjour_convo_closed(GaimConnection *connection, const char *who)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
250 {
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
251 GaimBuddy *buddy = gaim_find_buddy(connection->account, who);
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
252
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
253 bonjour_jabber_close_conversation(((BonjourData*)(connection->proto_data))->jabber_data, buddy);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
254 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
255
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
256 static void
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
257 bonjour_list_emblems(GaimBuddy *buddy,
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
258 const char **se, const char **sw,
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
259 const char **nw,const char **ne)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
260 {
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
261 GaimPresence *presence;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
262
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
263 presence = gaim_buddy_get_presence(buddy);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
264
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
265 if (!gaim_presence_is_available(presence))
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
266 *se = "away";
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
267 }
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
268
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
269 static char *
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
270 bonjour_status_text(GaimBuddy *buddy)
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
271 {
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
272 GaimPresence *presence;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
273
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
274 presence = gaim_buddy_get_presence(buddy);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
275
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
276 if (gaim_presence_is_available(presence))
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
277 return g_strdup("");
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
278 else
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
279 return g_strdup("Away");
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
280 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
281
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
282 static char *
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
283 bonjour_tooltip_text(GaimBuddy *buddy)
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
284 {
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
285 GString *ret;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
286 GaimPresence *presence;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
287 GaimStatus *status;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
288 const char *status_description;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
289 const char *message;
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
290
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
291 presence = gaim_buddy_get_presence(buddy);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
292 status = gaim_presence_get_active_status(presence);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
293 message = gaim_status_get_attr_string(status, "message");
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
294
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
295 if (gaim_presence_is_available(presence))
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
296 status_description = gaim_status_get_name(status);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
297 else if (gaim_presence_is_idle(presence))
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
298 status_description = _("Idle");
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
299 else
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
300 status_description = gaim_status_get_name(status);
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
301
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
302 ret = g_string_new("");
11519
0dfda214df89 [gaim-migrate @ 13764]
Mark Doliner <mark@kingant.net>
parents: 11515
diff changeset
303 g_string_append_printf(ret, _("\n<b>Status:</b> %s"), status_description);
0dfda214df89 [gaim-migrate @ 13764]
Mark Doliner <mark@kingant.net>
parents: 11515
diff changeset
304 if (message != NULL)
0dfda214df89 [gaim-migrate @ 13764]
Mark Doliner <mark@kingant.net>
parents: 11515
diff changeset
305 g_string_append_printf(ret, _("\n<b>Message:</b> %s"), message);
11496
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
306
3f038da50a18 [gaim-migrate @ 13740]
Mark Doliner <mark@kingant.net>
parents: 11477
diff changeset
307 return g_string_free(ret, FALSE);
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
308 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
309
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
310 static GaimPlugin *my_protocol = NULL;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
311
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
312 static GaimPluginProtocolInfo prpl_info =
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
313 {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
314 OPT_PROTO_NO_PASSWORD,
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
315 NULL, /* user_splits */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
316 NULL, /* protocol_options */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
317 {"png", 0, 0, 96, 96, GAIM_ICON_SCALE_DISPLAY}, /* icon_spec */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
318 bonjour_list_icon, /* list_icon */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
319 bonjour_list_emblems, /* list_emblems */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
320 bonjour_status_text, /* status_text */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
321 bonjour_tooltip_text, /* tooltip_text */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
322 bonjour_status_types, /* status_types */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
323 NULL, /* blist_node_menu */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
324 NULL, /* chat_info */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
325 NULL, /* chat_info_defaults */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
326 bonjour_login, /* login */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
327 bonjour_close, /* close */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
328 bonjour_send_im, /* send_im */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
329 NULL, /* set_info */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
330 NULL, /* send_typing */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
331 NULL, /* get_info */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
332 bonjour_set_status, /* set_status */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
333 NULL, /* set_idle */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
334 NULL, /* change_passwd */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
335 NULL, /* add_buddy */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
336 NULL, /* add_buddies */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
337 NULL, /* remove_buddy */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
338 NULL, /* remove_buddies */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
339 NULL, /* add_permit */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
340 NULL, /* add_deny */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
341 NULL, /* rem_permit */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
342 NULL, /* rem_deny */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
343 NULL, /* set_permit_deny */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
344 NULL, /* join_chat */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
345 NULL, /* reject_chat */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
346 NULL, /* get_chat_name */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
347 NULL, /* chat_invite */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
348 NULL, /* chat_leave */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
349 NULL, /* chat_whisper */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
350 NULL, /* chat_send */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
351 NULL, /* keepalive */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
352 NULL, /* register_user */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
353 NULL, /* get_cb_info */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
354 NULL, /* get_cb_away */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
355 NULL, /* alias_buddy */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
356 NULL, /* group_buddy */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
357 NULL, /* rename_group */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
358 NULL, /* buddy_free */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
359 bonjour_convo_closed, /* convo_closed */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
360 NULL, /* normalize */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
361 NULL, /* set_buddy_icon */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
362 NULL, /* remove_group */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
363 NULL, /* get_cb_real_name */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
364 NULL, /* set_chat_topic */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
365 NULL, /* find_blist_chat */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
366 NULL, /* roomlist_get_list */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
367 NULL, /* roomlist_cancel */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
368 NULL, /* roomlist_expand_category */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
369 NULL, /* can_receive_file */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
370 NULL /* send_file */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
371 };
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
372
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
373 static GaimPluginInfo info =
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
374 {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
375 GAIM_PLUGIN_MAGIC,
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
376 GAIM_MAJOR_VERSION,
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
377 GAIM_MINOR_VERSION,
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
378 GAIM_PLUGIN_PROTOCOL, /**< type */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
379 NULL, /**< ui_requirement */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
380 0, /**< flags */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
381 NULL, /**< dependencies */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
382 GAIM_PRIORITY_DEFAULT, /**< priority */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
383
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
384 "prpl-bonjour", /**< id */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
385 "Bonjour", /**< name */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
386 VERSION, /**< version */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
387 /** summary */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
388 N_("Bonjour Protocol Plugin"),
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
389 /** description */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
390 N_("Bonjour Protocol Plugin"),
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
391 NULL, /**< author */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
392 GAIM_WEBSITE, /**< homepage */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
393
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
394 NULL, /**< load */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
395 NULL, /**< unload */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
396 NULL, /**< destroy */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
397
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
398 NULL, /**< ui_info */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
399 &prpl_info, /**< extra_info */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
400 NULL, /**< prefs_info */
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
401 NULL
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
402 };
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
403
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
404 static void
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
405 init_plugin(GaimPlugin *plugin)
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
406 {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
407 GaimAccountUserSplit *split;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
408 GaimAccountOption *option;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
409 char hostname[255];
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
410
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
411 if (gethostname(hostname, 255) != 0) {
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
412 gaim_debug_warning("rendezvous", "Error %d when getting host name. Using \"localhost.\"\n", errno);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
413 strcpy(hostname, "localhost");
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
414 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
415
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
416 /* Creating the user splits */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
417 split = gaim_account_user_split_new(_("Host name"), hostname, '@');
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
418 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
419
11829
4669e7461968 [gaim-migrate @ 14120]
Richard Laager <rlaager@wiktel.com>
parents: 11718
diff changeset
420 /* Creating the options for the protocol */
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
421 option = gaim_account_option_int_new(_("Port"), "port", 5298);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
422 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
423
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
424 option = gaim_account_option_string_new(_("First name"), "first", "Gaim");
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
425 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
426
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
427 option = gaim_account_option_string_new(_("Last name"), "last", "User");
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
428 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
429
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
430 option = gaim_account_option_string_new(_("Email"), "email", "");
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
431 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
11539
5a2c38d33eb4 [gaim-migrate @ 13794]
Mark Doliner <mark@kingant.net>
parents: 11519
diff changeset
432
11477
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
433 my_protocol = plugin;
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
434 }
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
435
36f575351c49 [gaim-migrate @ 13719]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
436 GAIM_INIT_PLUGIN(bonjour, init_plugin, info);