winlin

merge from allspace srs-librtmp for win vs2010. 2.0.36

@@ -112,7 +112,7 @@ int main(int argc, char** argv) @@ -112,7 +112,7 @@ int main(int argc, char** argv)
112 printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision()); 112 printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision());
113 113
114 rtmp = srs_rtmp_create("rtmp://ossrs.net/live/livestream"); 114 rtmp = srs_rtmp_create("rtmp://ossrs.net/live/livestream");
115 - srs_lib_trace("create rtmp success"); 115 + srs_human_trace("create rtmp success");
116 srs_rtmp_destroy(rtmp); 116 srs_rtmp_destroy(rtmp);
117 117
118 return 0; 118 return 0;
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 // current release version 31 // current release version
32 #define VERSION_MAJOR 2 32 #define VERSION_MAJOR 2
33 #define VERSION_MINOR 0 33 #define VERSION_MINOR 0
34 -#define VERSION_REVISION 35 34 +#define VERSION_REVISION 36
35 // server info. 35 // server info.
36 #define RTMP_SIG_SRS_KEY "SRS" 36 #define RTMP_SIG_SRS_KEY "SRS"
37 #define RTMP_SIG_SRS_ROLE "origin/edge server" 37 #define RTMP_SIG_SRS_ROLE "origin/edge server"
@@ -45,22 +45,22 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -45,22 +45,22 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
45 45
46 SimpleSocketStream::SimpleSocketStream() 46 SimpleSocketStream::SimpleSocketStream()
47 { 47 {
48 - fd = -1; 48 + SOCKET_RESET(fd);
49 send_timeout = recv_timeout = ST_UTIME_NO_TIMEOUT; 49 send_timeout = recv_timeout = ST_UTIME_NO_TIMEOUT;
50 recv_bytes = send_bytes = 0; 50 recv_bytes = send_bytes = 0;
  51 + SOCKET_SETUP();
51 } 52 }
52 53
53 SimpleSocketStream::~SimpleSocketStream() 54 SimpleSocketStream::~SimpleSocketStream()
54 { 55 {
55 - if (fd != -1) {  
56 - ::close(fd);  
57 - fd = -1;  
58 - } 56 + SOCKET_CLOSE(fd);
  57 + SOCKET_CLEANUP();
59 } 58 }
60 59
61 int SimpleSocketStream::create_socket() 60 int SimpleSocketStream::create_socket()
62 { 61 {
63 - if((fd = ::socket(AF_INET, SOCK_STREAM, 0)) < 0){ 62 + fd = ::socket(AF_INET, SOCK_STREAM, 0);
  63 + if (!SOCKET_VALID(fd)) {
64 return ERROR_SOCKET_CREATE; 64 return ERROR_SOCKET_CREATE;
65 } 65 }
66 66
@@ -95,12 +95,12 @@ int SimpleSocketStream::read(void* buf, size_t size, ssize_t* nread) @@ -95,12 +95,12 @@ int SimpleSocketStream::read(void* buf, size_t size, ssize_t* nread)
95 // On success a non-negative integer indicating the number of bytes actually read is returned 95 // On success a non-negative integer indicating the number of bytes actually read is returned
96 // (a value of 0 means the network connection is closed or end of file is reached). 96 // (a value of 0 means the network connection is closed or end of file is reached).
97 if (nb_read <= 0) { 97 if (nb_read <= 0) {
98 - if (nb_read < 0 && errno == ETIME) { 98 + if (nb_read < 0 && SOCKET_ERRNO() == SOCKET_ETIME) {
99 return ERROR_SOCKET_TIMEOUT; 99 return ERROR_SOCKET_TIMEOUT;
100 } 100 }
101 101
102 if (nb_read == 0) { 102 if (nb_read == 0) {
103 - errno = ECONNRESET; 103 + errno = SOCKET_ECONNRESET;
104 } 104 }
105 105
106 return ERROR_SOCKET_READ; 106 return ERROR_SOCKET_READ;
@@ -158,7 +158,7 @@ int SimpleSocketStream::writev(const iovec *iov, int iov_size, ssize_t* nwrite) @@ -158,7 +158,7 @@ int SimpleSocketStream::writev(const iovec *iov, int iov_size, ssize_t* nwrite)
158 // returned, and errno is set appropriately. 158 // returned, and errno is set appropriately.
159 if (nb_write <= 0) { 159 if (nb_write <= 0) {
160 // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 160 // @see https://github.com/winlinvip/simple-rtmp-server/issues/200
161 - if (nb_write < 0 && errno == ETIME) { 161 + if (nb_write < 0 && SOCKET_ERRNO() == SOCKET_ETIME) {
162 return ERROR_SOCKET_TIMEOUT; 162 return ERROR_SOCKET_TIMEOUT;
163 } 163 }
164 164
@@ -215,7 +215,7 @@ int SimpleSocketStream::write(void* buf, size_t size, ssize_t* nwrite) @@ -215,7 +215,7 @@ int SimpleSocketStream::write(void* buf, size_t size, ssize_t* nwrite)
215 215
216 if (nb_write <= 0) { 216 if (nb_write <= 0) {
217 // @see https://github.com/winlinvip/simple-rtmp-server/issues/200 217 // @see https://github.com/winlinvip/simple-rtmp-server/issues/200
218 - if (nb_write < 0 && errno == ETIME) { 218 + if (nb_write < 0 && SOCKET_ERRNO() == SOCKET_ETIME) {
219 return ERROR_SOCKET_TIMEOUT; 219 return ERROR_SOCKET_TIMEOUT;
220 } 220 }
221 221
@@ -31,6 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,6 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 #include <srs_core.hpp> 31 #include <srs_core.hpp>
32 32
33 #include <srs_protocol_io.hpp> 33 #include <srs_protocol_io.hpp>
  34 +#include <srs_librtmp.hpp>
34 35
35 /** 36 /**
36 * simple socket stream, 37 * simple socket stream,
@@ -43,7 +44,7 @@ private: @@ -43,7 +44,7 @@ private:
43 int64_t send_timeout; 44 int64_t send_timeout;
44 int64_t recv_bytes; 45 int64_t recv_bytes;
45 int64_t send_bytes; 46 int64_t send_bytes;
46 - int fd; 47 + SOCKET fd;
47 public: 48 public:
48 SimpleSocketStream(); 49 SimpleSocketStream();
49 virtual ~SimpleSocketStream(); 50 virtual ~SimpleSocketStream();
@@ -133,47 +133,29 @@ struct Context @@ -133,47 +133,29 @@ struct Context
133 return 0; 133 return 0;
134 } 134 }
135 135
136 - int open(const char *pathname, int flags) 136 + int socket_setup()
137 { 137 {
138 - return open(pathname, flags, 0);  
139 - }  
140 -  
141 - int open(const char *pathname, int flags, mode_t mode)  
142 - {  
143 - FILE* file = NULL;  
144 -  
145 - if ((flags & O_RDONLY) == O_RDONLY) {  
146 - file = fopen(pathname, "r");  
147 - } else {  
148 - file = fopen(pathname, "w+");  
149 - }  
150 -  
151 - if (file == NULL) { 138 + WORD wVersionRequested;
  139 + WSADATA wsaData;
  140 + int err;
  141 +
  142 + /* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
  143 + wVersionRequested = MAKEWORD(2, 2);
  144 +
  145 + err = WSAStartup(wVersionRequested, &wsaData);
  146 + if (err != 0) {
  147 + /* Tell the user that we could not find a usable */
  148 + /* Winsock DLL. */
  149 + //printf("WSAStartup failed with error: %d\n", err);
152 return -1; 150 return -1;
153 } 151 }
154 -  
155 - return (int)file;  
156 - }  
157 -  
158 - int close(int fd)  
159 - {  
160 - FILE* file = (FILE*)fd;  
161 - return fclose(file);  
162 - }  
163 -  
164 - off_t lseek(int fd, off_t offset, int whence)  
165 - {  
166 - return (off_t)fseek((FILE*)fd, offset, whence);  
167 - }  
168 -  
169 - ssize_t write(int fd, const void *buf, size_t count)  
170 - {  
171 - return (ssize_t)fwrite(buf, count, 1, (FILE*)fd); 152 + return 0;
172 } 153 }
173 154
174 - ssize_t read(int fd, void *buf, size_t count) 155 + int socket_cleanup()
175 { 156 {
176 - return (ssize_t)fread(buf, count, 1, (FILE*)fd); 157 + WSACleanup();
  158 + return 0;
177 } 159 }
178 160
179 pid_t getpid(void) 161 pid_t getpid(void)
@@ -31,7 +31,23 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,7 +31,23 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 #include <sys/types.h> 31 #include <sys/types.h>
32 32
33 // for srs-librtmp, @see https://github.com/winlinvip/simple-rtmp-server/issues/213 33 // for srs-librtmp, @see https://github.com/winlinvip/simple-rtmp-server/issues/213
34 -#ifdef _WIN32 34 +#ifndef _WIN32
  35 + #define SOCKET_ETIME ETIME
  36 + #define SOCKET_ECONNRESET ECONNRESET
  37 +
  38 + #define SOCKET int
  39 + #define SOCKET_ERRNO() errno
  40 + #define SOCKET_RESET(fd) fd = -1; (void)0
  41 + #define SOCKET_CLOSE(fd) \
  42 + if (fd > 0) {\
  43 + ::close(fd); \
  44 + fd = -1; \
  45 + } \
  46 + (void)0
  47 + #define SOCKET_VALID(x) (x > 0)
  48 + #define SOCKET_SETUP() (void)0
  49 + #define SOCKET_CLEANUP() (void)0
  50 +#else
35 #define _CRT_SECURE_NO_WARNINGS 51 #define _CRT_SECURE_NO_WARNINGS
36 typedef unsigned long long u_int64_t; 52 typedef unsigned long long u_int64_t;
37 typedef long long int64_t; 53 typedef long long int64_t;
@@ -50,6 +66,17 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -50,6 +66,17 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
50 #include <windows.h> 66 #include <windows.h>
51 int gettimeofday(struct timeval* tv, struct timezone* tz); 67 int gettimeofday(struct timeval* tv, struct timezone* tz);
52 #define PRId64 "lld" 68 #define PRId64 "lld"
  69 +
  70 + #define SOCKET_ETIME WSAETIMEDOUT
  71 + #define SOCKET_ECONNRESET WSAECONNRESET
  72 + #define SOCKET_ERRNO() WSAGetLastError()
  73 + #define SOCKET_RESET(x) x=INVALID_SOCKET
  74 + #define SOCKET_CLOSE(x) if(x!=INVALID_SOCKET){::closesocket(x);x=INVALID_SOCKET;}
  75 + #define SOCKET_VALID(x) (x!=INVALID_SOCKET)
  76 + #define SOCKET_BUFF(x) ((char*)x)
  77 + #define SOCKET_SETUP() socket_setup()
  78 + #define SOCKET_CLEANUP() socket_cleanup()
  79 +
53 typedef int socklen_t; 80 typedef int socklen_t;
54 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 81 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
55 typedef int mode_t; 82 typedef int mode_t;
@@ -58,18 +85,23 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -58,18 +85,23 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
58 #define S_IRGRP 0 85 #define S_IRGRP 0
59 #define S_IWGRP 0 86 #define S_IWGRP 0
60 #define S_IROTH 0 87 #define S_IROTH 0
61 - int open(const char *pathname, int flags);  
62 - int open(const char *pathname, int flags, mode_t mode);  
63 - int close(int fd);  
64 - off_t lseek(int fd, off_t offset, int whence);  
65 - ssize_t write(int fd, const void *buf, size_t count);  
66 - ssize_t read(int fd, void *buf, size_t count); 88 +
  89 + #include <io.h>
  90 + #include <fcntl.h>
  91 + #define open _open
  92 + #define close _close
  93 + #define lseek _lseek
  94 + #define write _write
  95 + #define read _read
  96 +
67 typedef int pid_t; 97 typedef int pid_t;
68 pid_t getpid(void); 98 pid_t getpid(void);
69 #define snprintf _snprintf 99 #define snprintf _snprintf
70 ssize_t writev(int fd, const struct iovec *iov, int iovcnt); 100 ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
71 typedef int64_t useconds_t; 101 typedef int64_t useconds_t;
72 int usleep(useconds_t usec); 102 int usleep(useconds_t usec);
  103 + int socket_setup();
  104 + int socket_cleanup();
73 #endif 105 #endif
74 106
75 /** 107 /**