diff options
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/jabber/jabber.c | 2 | ||||
| -rw-r--r-- | protocols/nogaim.h | 15 | ||||
| -rw-r--r-- | protocols/oscar/oscar.c | 29 | 
3 files changed, 39 insertions, 7 deletions
| diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index 7147a628..01353f8e 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -440,7 +440,7 @@ static void jabber_remove_buddy( struct im_connection *ic, char *who, char *grou  		presence_send_request( ic, who, "unsubscribe" );  } -static struct groupchat *jabber_chat_join_( struct im_connection *ic, const char *room, const char *nick, const char *password ) +static struct groupchat *jabber_chat_join_( struct im_connection *ic, const char *room, const char *nick, const char *password, set_t **sets )  {  	if( strchr( room, '@' ) == NULL )  		imcb_error( ic, "Invalid room name: %s", room ); diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 1d9ac71e..46f6535a 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -211,13 +211,19 @@ struct prpl {  	 * your protocol does not support publicly named group chats, then do  	 * not implement this. */  	struct groupchat * -	     (* chat_join)	(struct im_connection *, const char *room, const char *nick, const char *password); +	     (* chat_join)	(struct im_connection *, const char *room, +	                         const char *nick, const char *password, set_t **sets);  	/* Change the topic, if supported. Note that BitlBee expects the IM  	   server to confirm the topic change with a regular topic change  	   event. If it doesn't do that, you have to fake it to make it  	   visible to the user. */  	void (* chat_topic)	(struct groupchat *, char *topic); +	/* If your protocol module needs any special info for joining chatrooms +	   other than a roomname + nickname, add them here. */ +	void (* chat_add_settings)	(account_t *acc, set_t **head); +	void (* chat_free_settings)	(account_t *acc, set_t **head); +	  	/* You can tell what away states your protocol supports, so that  	 * BitlBee will try to map the IRC away reasons to them. If your  	 * protocol doesn't have any, just return one generic "Away". */ @@ -233,6 +239,13 @@ struct prpl {  	/* Incoming transfer request */  	void (* transfer_request) (struct im_connection *, file_transfer_t *ft, char *handle ); +	 +	/* Some placeholders so eventually older plugins may cooperate with newer BitlBees. */ +	void *resv1; +	void *resv2; +	void *resv3; +	void *resv4; +	void *resv5;  };  /* im_api core stuff. */ diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c index 11539852..fdf0d82c 100644 --- a/protocols/oscar/oscar.c +++ b/protocols/oscar/oscar.c @@ -2505,7 +2505,8 @@ void oscar_chat_leave(struct groupchat *c)  	oscar_chat_kill(c->ic, c->data);  } -struct groupchat *oscar_chat_join(struct im_connection * ic, const char * room, const char * nick, const char * password ) +struct groupchat *oscar_chat_join_internal(struct im_connection *ic, const char *room, +	const char *nick, const char *password, int exchange_number)  {  	struct oscar_data * od = (struct oscar_data *)ic->proto_data;  	aim_conn_t * cur; @@ -2513,13 +2514,13 @@ struct groupchat *oscar_chat_join(struct im_connection * ic, const char * room,  	if((cur = aim_getconn_type(od->sess, AIM_CONN_TYPE_CHATNAV))) {  		int st; -		st = aim_chatnav_createroom(od->sess, cur, room, 4); +		st = aim_chatnav_createroom(od->sess, cur, room, exchange_number);  		return NULL;  	} else {  		struct create_room * cr = g_new0(struct create_room, 1); -		cr->exchange = 4; +		cr->exchange = exchange_number;  		cr->name = g_strdup(room);  		od->create_rooms = g_slist_append(od->create_rooms, cr);  		aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); @@ -2528,6 +2529,12 @@ struct groupchat *oscar_chat_join(struct im_connection * ic, const char * room,  	}  } +struct groupchat *oscar_chat_join(struct im_connection *ic, const char *room, +	const char *nick, const char *password, set_t **sets) +{ +	return oscar_chat_join_internal(ic, room, nick, password, set_getint(sets, "exchange_number")); +} +  struct groupchat *oscar_chat_with(struct im_connection * ic, char *who)  {  	struct oscar_data * od = (struct oscar_data *)ic->proto_data; @@ -2544,7 +2551,7 @@ struct groupchat *oscar_chat_with(struct im_connection * ic, char *who)  			*s = '0';  	c = imcb_chat_new(ic, chatname); -	ret = oscar_chat_join(ic, chatname, NULL, NULL); +	ret = oscar_chat_join_internal(ic, chatname, NULL, NULL, 4);  	aim_chat_invite(od->sess, od->conn, who, "", 4, chatname, 0x0);  	g_free(chatname); @@ -2556,7 +2563,7 @@ void oscar_accept_chat(void *data)  {  	struct aim_chat_invitation * inv = data; -	oscar_chat_join(inv->ic, inv->name, NULL, NULL); +	oscar_chat_join_internal(inv->ic, inv->name, NULL, NULL, 4);  	g_free(inv->name);  	g_free(inv);  } @@ -2569,6 +2576,16 @@ void oscar_reject_chat(void *data)  	g_free(inv);  } +void oscar_chat_add_settings(account_t *acc, set_t **head) +{ +	set_add(head, "exchange_number", "4", set_eval_int, NULL); +} + +void oscar_chat_free_settings(account_t *acc, set_t **head) +{ +	set_del(head, "exchange_number"); +} +  void oscar_initmodule()   {  	struct prpl *ret = g_new0(struct prpl, 1); @@ -2589,6 +2606,8 @@ void oscar_initmodule()  	ret->chat_leave = oscar_chat_leave;  	ret->chat_with = oscar_chat_with;  	ret->chat_join = oscar_chat_join; +	ret->chat_add_settings = oscar_chat_add_settings; +	ret->chat_free_settings = oscar_chat_free_settings;  	ret->add_permit = oscar_add_permit;  	ret->add_deny = oscar_add_deny;  	ret->rem_permit = oscar_rem_permit; | 
