if (p != (char *)1 && *p!='\0') {
- char *v, *e;
+ char *v, *e = 0;
- if ((v = strchr(p, ':'))) {
+ v = strchr(p, ':');
+ if (v) {
v++;
while(v && *v == ' ') {
v++;
}
if (v) {
- if (!(e = strchr(v, '\r'))) {
+ e = strchr(v, '\r');
+ if (!e) {
e = strchr(v, '\n');
}
}
if (v && e) {
int cplen;
- int len = e - v;
+ size_t len = e - v;
if (len > buflen - 1) {
cplen = buflen -1;
size_t x=0;
unsigned int b=0,l=0;
+ if(olen) {
+ }
+
for(x=0;x<ilen;x++) {
b = (b<<8) + in[x];
l += 8;
unsigned char output[SHA1_HASH_SIZE] = "";
char b64[256] = "";
char respond[512] = "";
- ssize_t bytes;
- char *p, *e;
+ issize_t bytes;
+ char *p, *e = 0;
if (wsh->sock == ws_sock_invalid) {
return -3;
p = wsh->buffer + 4;
- if (!(e = strchr(p, ' '))) {
+ e = strchr(p, ' ');
+ if (!e) {
goto err;
}
}
-ssize_t ws_raw_read(wsh_t *wsh, void *data, size_t bytes)
+issize_t ws_raw_read(wsh_t *wsh, void *data, size_t bytes)
{
- ssize_t r;
+ issize_t r;
int x = 0;
if (wsh->ssl) {
do {
r = SSL_read(wsh->ssl, data, bytes);
+#ifndef _MSC_VER
if (x++) usleep(10000);
+#else
+ if (x++) Sleep(10);
+#endif
} while (r == -1 && SSL_get_error(wsh->ssl, r) == SSL_ERROR_WANT_READ && x < 100);
return r;
do {
r = recv(wsh->sock, data, bytes, 0);
- if (x++) usleep(10000);
+#ifndef _MSC_VER
+ if (x++) usleep(10000);
+#else
+ if (x++) Sleep(10);
+#endif
} while (r == -1 && (errno == EAGAIN || errno == EINTR) && x < 100);
//if (r<0) {
return r;
}
-ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
+issize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes)
{
size_t r;
return 0;
}
-ssize_t ws_close(wsh_t *wsh, int16_t reason)
+issize_t ws_close(wsh_t *wsh, int16_t reason)
{
if (wsh->down) {
}
-ssize_t ws_read_frame(wsh_t *wsh, ws_opcode_t *oc, uint8_t **data)
+issize_t ws_read_frame(wsh_t *wsh, ws_opcode_t *oc, uint8_t **data)
{
- ssize_t need = 2;
+ issize_t need = 2;
char *maskp;
again:
u64 = (uint64_t *) wsh->payload;
wsh->payload += 8;
- wsh->plen = ntohl(*u64);
+ wsh->plen = ntohl((u_long)*u64);
} else if (wsh->plen == 126) {
uint16_t *u16;
need = (wsh->plen - (wsh->datalen - need));
- if ((need + wsh->datalen) > wsh->buflen) {
+ if ((need + wsh->datalen) > (issize_t)wsh->buflen) {
/* too big - Ain't nobody got time fo' dat */
*oc = WSOC_CLOSE;
return ws_close(wsh, WS_DATA_TOO_BIG);
wsh->rplen = wsh->plen - need;
while(need) {
- ssize_t r = ws_raw_read(wsh, wsh->payload + wsh->rplen, need);
+ issize_t r = ws_raw_read(wsh, wsh->payload + wsh->rplen, need);
if (r < 1) {
/* invalid read - protocol err .. */
}
if (mask && maskp) {
- uint32_t i;
+ issize_t i;
for (i = 0; i < wsh->datalen; i++) {
wsh->payload[i] ^= maskp[i % 4];
}
}
-ssize_t ws_feed_buf(wsh_t *wsh, void *data, size_t bytes)
+issize_t ws_feed_buf(wsh_t *wsh, void *data, size_t bytes)
{
if (bytes + wsh->wdatalen > wsh->buflen) {
return bytes;
}
-ssize_t ws_send_buf(wsh_t *wsh, ws_opcode_t oc)
+issize_t ws_send_buf(wsh_t *wsh, ws_opcode_t oc)
{
- ssize_t r = 0;
+ issize_t r = 0;
if (!wsh->wdatalen) {
return -1;
}
-ssize_t ws_write_frame(wsh_t *wsh, ws_opcode_t oc, void *data, size_t bytes)
+issize_t ws_write_frame(wsh_t *wsh, ws_opcode_t oc, void *data, size_t bytes)
{
uint8_t hdr[14] = { 0 };
size_t hlen = 2;
//printf("WRITE[%ld]-----------------------------:\n[%s]\n-----------------------------------\n", bytes, (char *) data);
- hdr[0] = oc | 0x80;
+ hdr[0] = (uint8_t)(oc | 0x80);
if (bytes < 126) {
- hdr[1] = bytes;
+ hdr[1] = (uint8_t)bytes;
} else if (bytes < 0x10000) {
uint16_t *u16;
*u64 = htonl(bytes);
}
- if (ws_raw_write(wsh, (void *) &hdr[0], hlen) != hlen) {
+ if (ws_raw_write(wsh, (void *) &hdr[0], hlen) != (issize_t)hlen) {
return -1;
}
- if (ws_raw_write(wsh, data, bytes) != bytes) {
+ if (ws_raw_write(wsh, data, bytes) != (issize_t)bytes) {
return -2;
}
#define B64BUFFLEN 1024
#include <sys/types.h>
+#ifndef _MSC_VER
#include <arpa/inet.h>
#include <sys/wait.h>
+#include <sys/socket.h>
+#else
+#pragma warning(disable:4996)
+#endif
#include <string.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <sys/socket.h>
#include <assert.h>
#include <errno.h>
//#include "sha1.h"
#include <openssl/ssl.h>
+#include <sofia-sip/su_types.h>
struct globals_s {
char *buffer;
char *wbuffer;
size_t buflen;
- ssize_t datalen;
- ssize_t wdatalen;
+ issize_t datalen;
+ issize_t wdatalen;
char *payload;
- ssize_t plen;
- ssize_t rplen;
+ issize_t plen;
+ issize_t rplen;
SSL *ssl;
int handshake;
uint8_t down;
unsigned :0;
} wsh_t;
-ssize_t ws_send_buf(wsh_t *wsh, ws_opcode_t oc);
-ssize_t ws_feed_buf(wsh_t *wsh, void *data, size_t bytes);
+issize_t ws_send_buf(wsh_t *wsh, ws_opcode_t oc);
+issize_t ws_feed_buf(wsh_t *wsh, void *data, size_t bytes);
-ssize_t ws_raw_read(wsh_t *wsh, void *data, size_t bytes);
-ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes);
-ssize_t ws_read_frame(wsh_t *wsh, ws_opcode_t *oc, uint8_t **data);
-ssize_t ws_write_frame(wsh_t *wsh, ws_opcode_t oc, void *data, size_t bytes);
+issize_t ws_raw_read(wsh_t *wsh, void *data, size_t bytes);
+issize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes);
+issize_t ws_read_frame(wsh_t *wsh, ws_opcode_t *oc, uint8_t **data);
+issize_t ws_write_frame(wsh_t *wsh, ws_opcode_t oc, void *data, size_t bytes);
int ws_init(wsh_t *wsh, ws_socket_t sock, size_t buflen, SSL_CTX *ssl_ctx, int close_sock);
-ssize_t ws_close(wsh_t *wsh, int16_t reason);
+issize_t ws_close(wsh_t *wsh, int16_t reason);
void init_ssl(void);
void deinit_ssl(void);
+#ifndef _MSC_VER
static inline uint64_t get_unaligned_uint64(const void *p)
{
const struct { uint64_t d; } __attribute__((packed)) *pp = p;
return pp->d;
}
-
+#endif
#endif