diff src/protocols/simple/simple.c @ 12730:d5b8f4dc1622

[gaim-migrate @ 15074] Update gaim_network_listen*() to have the socket type specified. This allows us to use the same functionality to listen on UDP sockets too. There are probably a couple things that should be updated to use this. I also updated SIMPLE to allow the connect port to be specified in the account options. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Thu, 05 Jan 2006 05:04:07 +0000
parents e893563d965d
children 2b61e6ed85c3
line wrap: on
line diff
--- a/src/protocols/simple/simple.c	Thu Jan 05 04:32:25 2006 +0000
+++ b/src/protocols/simple/simple.c	Thu Jan 05 05:04:07 2006 +0000
@@ -1198,15 +1198,16 @@
 	struct simple_account_data *sip = (struct simple_account_data*) data;
 
 	gchar *hostname;
-	int port = 5060;
+	int port = gaim_account_get_int(sip->account, "port", 0);
 
 	int error = 0;
-	struct sockaddr_in addr;
 	struct hostent *h;
 
 	/* find the host to connect to */
 	if(results) {
 		hostname = g_strdup(resp->hostname);
+		/* TODO: Should this work more like Jabber where the SRV value will be ignored
+		 * if there is one manually specified? */
 		port = resp->port;
 		g_free(resp);
 	} else {
@@ -1222,7 +1223,7 @@
 	/* TCP case */
 	if(! sip->udp) {
 		/* create socket for incoming connections */
-		sip->listenfd = gaim_network_listen_range(5060, 5160);
+		sip->listenfd = gaim_network_listen_range(5060, 5160, SOCK_STREAM);
 		if(sip->listenfd == -1) {
 			gaim_connection_error(sip->gc, _("Could not create listen socket"));
 			return;
@@ -1246,15 +1247,14 @@
 			return;
 		}
 
-		sip->fd = socket(AF_INET, SOCK_DGRAM, 0);
+		/* create socket for incoming connections */
+		sip->fd = gaim_network_listen_range(5060, 5160, SOCK_DGRAM);
 
-		addr.sin_family = AF_INET;
-		addr.sin_port = htons(5060);
-		addr.sin_addr.s_addr = INADDR_ANY;
-		while((bind(sip->fd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) <0) && ntohs(addr.sin_port)<5160) {
-			addr.sin_port = htons(ntohs(addr.sin_port)+1);
+		if(sip->fd == -1) {
+			gaim_connection_error(sip->gc, _("Could not create listen socket"));
+			return;
 		}
-		sip->listenport = ntohs(addr.sin_port);
+
 		sip->listenfd = sip->fd;
 
 		sip->listenpa = gaim_input_add(sip->fd, GAIM_INPUT_READ, simple_udp_process, sip->gc);
@@ -1461,6 +1461,10 @@
 	option = gaim_account_option_bool_new(_("Publish status (note: everyone may watch you)"), "dopublish", TRUE);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
+	option = gaim_account_option_int_new(_("Connect port"), "port", 5060);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
+
 	option = gaim_account_option_bool_new(_("Use UDP"), "udp", FALSE);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 	option = gaim_account_option_bool_new(_("Use proxy"), "useproxy", FALSE);