Merge branch 'silc.1.1.branch' of silc repo
[runtime.git] / lib / silcutil / silcsocketstream.c
index af8f2c34cba0b60f6584b07dd57b10931fe115ab..8d3056edaf0173489a905b42cb90c1f34c868eb8 100644 (file)
@@ -17,7 +17,7 @@
 
 */
 
-#include "silc.h"
+#include "silcruntime.h"
 
 /************************** Types and definitions ***************************/
 
@@ -43,7 +43,7 @@ SilcSchedule silc_socket_stream_get_schedule(SilcStream stream);
 /* Internal async host lookup context. */
 typedef struct {
   SilcSocketStream stream;
-  SilcSocketStreamStatus status;
+  SilcResult status;
   SilcSocketStreamCallback callback;
   SilcAsyncOperation op;
   void *context;
@@ -71,7 +71,7 @@ SILC_TASK_CALLBACK(silc_socket_host_lookup_finish)
     return;
   }
 
-  if (lookup->status != SILC_SOCKET_OK) {
+  if (lookup->status != SILC_OK) {
     SILC_LOG_DEBUG(("Socket stream lookup failed"));
     stream->schedule = NULL;
     silc_socket_stream_destroy(stream);
@@ -99,24 +99,24 @@ static void *silc_socket_host_lookup_start(void *context)
 
   silc_net_check_host_by_sock(stream->sock, &stream->hostname, &stream->ip);
   if (!stream->ip) {
-    lookup->status = SILC_SOCKET_UNKNOWN_IP;
+    lookup->status = SILC_ERR_UNKNOWN_IP;
     goto out;
   }
 
   if (!stream->hostname && lookup->require_fqdn) {
-    lookup->status = SILC_SOCKET_UNKNOWN_HOST;
+    lookup->status = SILC_ERR_UNKNOWN_HOST;
     goto out;
   }
 
   if (!stream->hostname) {
-    stream->hostname = strdup(stream->ip);
+    stream->hostname = silc_strdup(stream->ip);
     if (!stream->hostname) {
-      lookup->status = SILC_SOCKET_NO_MEMORY;
+      lookup->status = SILC_ERR_OUT_OF_MEMORY;
       goto out;
     }
   }
 
-  lookup->status = SILC_SOCKET_OK;
+  lookup->status = SILC_OK;
 
  out:
   silc_schedule_task_add_timeout(schedule, silc_socket_host_lookup_finish,
@@ -152,17 +152,27 @@ silc_socket_tcp_stream_create(SilcSocket sock, SilcBool lookup,
   SilcSocketStream stream;
   SilcSocketHostLookup l;
 
-  if (!sock || !schedule) {
-    SILC_LOG_ERROR(("Missing arguments to silc_socket_tcp_stream_create"));
+  if (!schedule) {
+    schedule = silc_schedule_get_global();
+    if (!schedule) {
+      silc_set_errno(SILC_ERR_INVALID_ARGUMENT);
+      if (callback)
+       callback(silc_errno, NULL, context);
+      return NULL;
+    }
+  }
+
+  if (!sock) {
+    silc_set_errno(SILC_ERR_INVALID_ARGUMENT);
     if (callback)
-      callback(SILC_SOCKET_ERROR, NULL, context);
+      callback(silc_errno, NULL, context);
     return NULL;
   }
 
   stream = silc_calloc(1, sizeof(*stream));
   if (!stream) {
     if (callback)
-      callback(SILC_SOCKET_NO_MEMORY, NULL, context);
+      callback(silc_errno, NULL, context);
     return NULL;
   }
 
@@ -177,7 +187,7 @@ silc_socket_tcp_stream_create(SilcSocket sock, SilcBool lookup,
   if (!l) {
     silc_free(stream);
     if (callback)
-      callback(SILC_SOCKET_NO_MEMORY, NULL, context);
+      callback(silc_errno, NULL, context);
     return NULL;
   }
 
@@ -193,7 +203,7 @@ silc_socket_tcp_stream_create(SilcSocket sock, SilcBool lookup,
       silc_free(stream);
       silc_free(l);
       if (callback)
-       callback(SILC_SOCKET_ERROR, NULL, context);
+       callback(silc_errno, NULL, context);
       return NULL;
     }
 
@@ -203,7 +213,7 @@ silc_socket_tcp_stream_create(SilcSocket sock, SilcBool lookup,
     return l->op;
   } else {
     /* No lookup */
-    l->status = SILC_SOCKET_OK;
+    l->status = SILC_OK;
     silc_socket_host_lookup_finish(schedule,
                                   silc_schedule_get_context(schedule),
                                   0, 0, l);
@@ -219,6 +229,14 @@ SilcStream silc_socket_udp_stream_create(SilcSocket sock, SilcBool ipv6,
 {
   SilcSocketStream stream;
 
+  if (!schedule) {
+    schedule = silc_schedule_get_global();
+    if (!schedule) {
+      silc_set_errno(SILC_ERR_INVALID_ARGUMENT);
+      return NULL;
+    }
+  }
+
   stream = silc_calloc(1, sizeof(*stream));
   if (!stream)
     return NULL;
@@ -296,17 +314,17 @@ SilcBool silc_socket_stream_set_info(SilcStream stream,
 
   if (hostname) {
     silc_free(socket_stream->hostname);
-    socket_stream->hostname = strdup(hostname);
+    socket_stream->hostname = silc_strdup(hostname);
     if (!socket_stream->hostname)
       return FALSE;
   }
   if (ip) {
     silc_free(socket_stream->ip);
-    socket_stream->ip = strdup(ip);
+    socket_stream->ip = silc_strdup(ip);
     if (!socket_stream->ip)
       return FALSE;
     if (!socket_stream->hostname) {
-      socket_stream->hostname = strdup(ip);
+      socket_stream->hostname = silc_strdup(ip);
       if (!socket_stream->hostname)
        return FALSE;
     }
@@ -317,19 +335,6 @@ SilcBool silc_socket_stream_set_info(SilcStream stream,
   return TRUE;
 }
 
-/* Return socket errno */
-
-int silc_socket_stream_get_error(SilcStream stream)
-{
-  SilcSocketStream socket_stream = stream;
-
-  if (!SILC_IS_SOCKET_STREAM(socket_stream) &&
-      !SILC_IS_SOCKET_STREAM_UDP(socket_stream))
-    return 0;
-
-  return socket_stream->sock_error;
-}
-
 /* Set QoS for socket stream */
 
 SilcBool silc_socket_stream_set_qos(SilcStream stream,