summaryrefslogtreecommitdiff
path: root/net/ushare/files/patch-ushare.c
blob: d5959c0af17d1dc8c8814773939d9e4623c3d931 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
--- src/ushare.c.orig	2007-12-09 15:03:36.000000000 +0200
+++ src/ushare.c	2010-11-09 14:56:44.261445831 +0200
@@ -171,6 +171,19 @@
   pthread_mutex_unlock (&ut->termination_mutex);
 }
 
+
+#ifdef __FreeBSD__
+static void
+*get_ip_addr(struct sockaddr *sa)
+{
+  if (sa->sa_family == AF_INET)
+    return &(((struct sockaddr_in*)sa)->sin_addr);
+  else
+    return &(((struct sockaddr_in6*)sa)->sin6_addr);
+}
+#endif /* __FreeBSD__ */
+
+
 static void
 handle_action_request (struct Upnp_Action_Request *request)
 {
@@ -188,7 +201,11 @@
   if (strcmp (request->DevUDN + 5, ut->udn))
     return;
 
+#ifndef __FreeBSD__
   ip = request->CtrlPtIPAddr.s_addr;
+#else
+  ip = get_ip_addr((struct sockaddr *)&request->CtrlPtIPAddr) ;
+#endif /* __FreeBSD__ */
   ip = ntohl (ip);
   sprintf (val, "%d.%d.%d.%d",
            (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF);
@@ -348,6 +365,7 @@
 
   UpnpEnableWebserver (TRUE);
 
+#ifndef __FreeBSD__
   res = UpnpSetVirtualDirCallbacks (&virtual_dir_callbacks);
   if (res != UPNP_E_SUCCESS)
   {
@@ -355,6 +373,43 @@
     free (description);
     return -1;
   }
+#else
+  if ((res = UpnpVirtualDir_set_GetInfoCallback(virtual_dir_callbacks.get_info)) != UPNP_E_SUCCESS ) {
+     log_error (_("Cannot set virtual directory callback - get_info\n"));
+     free (description);
+     return -1;
+  }
+
+  if ((res = UpnpVirtualDir_set_OpenCallback(virtual_dir_callbacks.open)) != UPNP_E_SUCCESS ) {
+     log_error (_("Cannot set virtual directory callback - open\n"));
+     free (description);
+     return -1;
+  }
+
+  if ((res = UpnpVirtualDir_set_ReadCallback(virtual_dir_callbacks.read)) != UPNP_E_SUCCESS ) {
+     log_error (_("Cannot set virtual directory callback - read\n"));
+     free (description);
+     return -1;
+  }
+
+  if ((res = UpnpVirtualDir_set_WriteCallback(virtual_dir_callbacks.write)) != UPNP_E_SUCCESS ) {
+     log_error (_("Cannot set virtual directory callback - write\n"));
+     free (description);
+     return -1;
+  }
+
+  if ((res = UpnpVirtualDir_set_SeekCallback(virtual_dir_callbacks.seek)) != UPNP_E_SUCCESS ) {
+     log_error (_("Cannot set virtual directory callback - seek\n"));
+     free (description);
+     return -1;
+  }
+
+  if ((res = UpnpVirtualDir_set_CloseCallback(virtual_dir_callbacks.close)) != UPNP_E_SUCCESS ) {
+     log_error (_("Cannot set virtual directory callback - close\n"));
+     free (description);
+     return -1;
+  }
+#endif /* __FreeBSD__ */
 
   res = UpnpAddVirtualDir (VIRTUAL_DIR);
   if (res != UPNP_E_SUCCESS)
@@ -421,6 +476,7 @@
   itf = itflist;
   while (itf)
   {
+#ifndef __FreeBSD__
     if ((itf->ifa_flags & IFF_UP)
         && !strncmp (itf->ifa_name, interface, IFNAMSIZ))
     {
@@ -430,6 +486,23 @@
       return true;
     }
     itf = itf->ifa_next;
+#else
+    if (strncmp (itf->ifa_name, interface, IFNAMSIZ)) {
+       itf = itf->ifa_next;
+       continue ;
+    }
+
+    if (itf->ifa_flags & IFF_UP) {
+       log_info (_("Interface %s is up.\n"), interface);
+       freeifaddrs (itflist);
+       return true ;
+    } else {
+         log_error (_("Interface %s is down.\n"), interface);
+         log_error (_("Recheck uShare's configuration and try again !\n"));
+         freeifaddrs (itflist);
+         return false ;
+      }
+#endif /*  __FreeBSD__ */
   }
 
   freeifaddrs (itf);