]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - uart/uart_posix.c
Specify that we need TCP and not UDP connection (#828)
[proxmark3-svn] / uart / uart_posix.c
index e3113e86165276de6ce9aa408bc87573b0bf8d4f..29a02cf7aaf446afdf2a61ef752d57f8f184fa61 100644 (file)
 #include <arpa/inet.h>
 #include <netdb.h>
 
+// Fix missing definition on OS X.
+// Taken from https://github.com/unbit/uwsgi/commit/b608eb1772641d525bfde268fe9d6d8d0d5efde7
+#ifndef SOL_TCP
+#define SOL_TCP IPPROTO_TCP
+#endif
+
 typedef struct termios term_info;
 typedef struct {
   int fd;           // Serial port file descriptor
@@ -63,9 +69,9 @@ typedef struct {
 } serial_port_unix;
 
 // Set time-out on 30 miliseconds
-const struct timeval timeout = {
+struct timeval timeout = {
   .tv_sec  =     0, // 0 second
-  .tv_usec = 300000  // 300000 micro seconds
+  .tv_usec = 30000  // 30000 micro seconds
 };
 
 serial_port uart_open(const char* pcPortName)
@@ -74,7 +80,7 @@ serial_port uart_open(const char* pcPortName)
   if (sp == 0) return INVALID_SERIAL_PORT;
   
   if (memcmp(pcPortName, "tcp:", 4) == 0) {
-    struct addrinfo *addr, *rp;
+    struct addrinfo *addr = NULL, *rp;
     char *addrstr = strdup(pcPortName + 4);
     if (addrstr == NULL) {
       printf("Error: strdup\n");
@@ -82,13 +88,23 @@ serial_port uart_open(const char* pcPortName)
     }
     char *colon = strrchr(addrstr, ':');
     char *portstr;
+
+    // Set time-out to 300 miliseconds only for TCP port
+    timeout.tv_usec = 300000;
+
     if (colon) {
       portstr = colon + 1;
       *colon = '\0';
     } else
       portstr = "7901";
 
-    int s = getaddrinfo(addrstr, portstr, NULL, &addr);
+    struct addrinfo info;
+
+    memset (&info, 0, sizeof(info));
+
+    info.ai_socktype = SOCK_STREAM;
+
+    int s = getaddrinfo(addrstr, portstr, &info, &addr);
     if (s != 0) {
       printf("Error: getaddrinfo: %s\n", gai_strerror(s));
       return INVALID_SERIAL_PORT;
Impressum, Datenschutz