loudmouth/lm-old-socket.c
changeset 448 4aec5fbe96f1
parent 447 b06a273612be
child 449 fc21afc00164
equal deleted inserted replaced
447:b06a273612be 448:4aec5fbe96f1
   151 	}
   151 	}
   152 
   152 
   153 	g_free (socket);
   153 	g_free (socket);
   154 }
   154 }
   155 
   155 
   156 gint
   156 static gint
   157 lm_old_socket_do_write (LmOldSocket *socket, const gchar *buf, gint len)
   157 old_socket_do_write (LmOldSocket *socket, const gchar *buf, guint len)
   158 {
   158 {
   159 	gint b_written;
   159         gint b_written;
   160 
   160 
   161 	if (old_socket_output_is_buffered (socket, buf, len)) {
   161         if (socket->ssl_started) {
   162                 return len;
       
   163         }
       
   164 
       
   165 	if (socket->ssl_started) {
       
   166 		b_written = _lm_ssl_send (socket->ssl, buf, len);
   162 		b_written = _lm_ssl_send (socket->ssl, buf, len);
   167 	} else {
   163 	} else {
   168 		GIOStatus io_status = G_IO_STATUS_AGAIN;
   164 		GIOStatus io_status = G_IO_STATUS_AGAIN;
   169 		gsize     bytes_written;
   165 		gsize     bytes_written;
   170 
   166 
   179 
   175 
   180 		if (io_status != G_IO_STATUS_NORMAL) {
   176 		if (io_status != G_IO_STATUS_NORMAL) {
   181 			b_written = -1;
   177 			b_written = -1;
   182 		}
   178 		}
   183 	}
   179 	}
       
   180 
       
   181         return b_written;
       
   182 }
       
   183 
       
   184 gint
       
   185 lm_old_socket_write (LmOldSocket *socket, const gchar *buf, gint len)
       
   186 {
       
   187 	gint b_written;
       
   188 
       
   189 	if (old_socket_output_is_buffered (socket, buf, len)) {
       
   190                 return len;
       
   191         }
       
   192 
       
   193         b_written = old_socket_do_write (socket, buf, len);
   184 
   194 
   185         if (b_written < len && b_written != -1) {
   195         if (b_written < len && b_written != -1) {
   186                 old_socket_setup_output_buffer (socket,
   196                 old_socket_setup_output_buffer (socket,
   187                                                 buf + b_written,
   197                                                 buf + b_written,
   188                                                 len - b_written);
   198                                                 len - b_written);
   710 	if (!out_buf) {
   720 	if (!out_buf) {
   711 		/* Should not be possible */
   721 		/* Should not be possible */
   712 		return FALSE;
   722 		return FALSE;
   713 	}
   723 	}
   714 
   724 
   715 	b_written = lm_old_socket_do_write (socket, out_buf->str, out_buf->len);
   725 	b_written = old_socket_do_write (socket, out_buf->str, out_buf->len);
   716 
   726 
   717 	if (b_written < 0) {
   727 	if (b_written < 0) {
   718 		(socket->closed_func) (socket, LM_DISCONNECT_REASON_ERROR, 
   728 		(socket->closed_func) (socket, LM_DISCONNECT_REASON_ERROR, 
   719 				       socket->user_data);
   729 				       socket->user_data);
   720 		return FALSE;
   730 		return FALSE;
   976 	req.ai_family   = AF_UNSPEC;
   986 	req.ai_family   = AF_UNSPEC;
   977 	req.ai_socktype = SOCK_STREAM;
   987 	req.ai_socktype = SOCK_STREAM;
   978 	req.ai_protocol = IPPROTO_TCP;
   988 	req.ai_protocol = IPPROTO_TCP;
   979 
   989 
   980 #ifdef HAVE_ASYNCNS
   990 #ifdef HAVE_ASYNCNS
   981 	if (!_asyncns_prep (socket, NULL))
   991 	if (!old_socket_asyncns_prep (socket, NULL))
   982 		return;
   992 		return;
   983 
   993 
   984 	socket->resolv_query =
   994 	socket->resolv_query =
   985 	  	asyncns_getaddrinfo (socket->asyncns_ctx,
   995 	  	asyncns_getaddrinfo (socket->asyncns_ctx,
   986 		    		     remote_addr,
   996 		    		     remote_addr,
  1072 		char          *srv;
  1082 		char          *srv;
  1073 		srv = g_strdup_printf ("_xmpp-client._tcp.%s", socket->domain);
  1083 		srv = g_strdup_printf ("_xmpp-client._tcp.%s", socket->domain);
  1074 		lm_verbose ("Performing a SRV lookup for %s\n", srv);
  1084 		lm_verbose ("Performing a SRV lookup for %s\n", srv);
  1075 
  1085 
  1076 #ifdef HAVE_ASYNCNS
  1086 #ifdef HAVE_ASYNCNS
  1077 		if (!_asyncns_prep (socket, error))
  1087 		if (!old_socket_asyncns_prep (socket, error))
  1078 			return NULL;
  1088 			return NULL;
  1079 		
  1089 		
  1080 		socket->resolv_query =
  1090 		socket->resolv_query =
  1081 			asyncns_res_query (socket->asyncns_ctx, srv, C_IN, T_SRV);
  1091 			asyncns_res_query (socket->asyncns_ctx, srv, C_IN, T_SRV);
  1082 		asyncns_setuserdata (socket->asyncns_ctx, socket->resolv_query, (gpointer) PHASE_1);
  1092 		asyncns_setuserdata (socket->asyncns_ctx, socket->resolv_query, (gpointer) PHASE_1);
  1221 
  1231 
  1222 	if (socket->asyncns_ctx) {
  1232 	if (socket->asyncns_ctx) {
  1223                 if (socket->resolv_query)
  1233                 if (socket->resolv_query)
  1224                         asyncns_cancel (socket->asyncns_ctx, socket->resolv_query);
  1234                         asyncns_cancel (socket->asyncns_ctx, socket->resolv_query);
  1225 
  1235 
  1226                 _asyncns_done (socket);
  1236                 old_so_asyncns_done (socket);
  1227 	}
  1237 	}
  1228 #else
  1238 #else
  1229         return;
  1239         return;
  1230 #endif /* HAVE_ASYNCNS */
  1240 #endif /* HAVE_ASYNCNS */
  1231 }
  1241 }