Changeset 5256 for pjproject/branches/projects/uwp/pjlib/src/pj/sock_uwp.h
- Timestamp:
- Mar 11, 2016 4:17:32 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/uwp/pjlib/src/pj/sock_uwp.h
r5254 r5256 19 19 #pragma once 20 20 21 22 #include <pj/assert.h> 23 #include <pj/sock.h> 24 #include <pj/string.h> 25 #include <pj/unicode.h> 26 27 21 28 enum { 22 29 READ_TIMEOUT = 60 * 1000, … … 37 44 ref class PjUwpSocketDatagramRecvHelper; 38 45 ref class PjUwpSocketListenerHelper; 46 class PjUwpSocket; 47 48 49 typedef struct PjUwpSocketCallback 50 { 51 void (*on_read)(PjUwpSocket *s, int bytes_read); 52 void (*on_write)(PjUwpSocket *s, int bytes_sent); 53 void (*on_accept)(PjUwpSocket *s); 54 void (*on_connect)(PjUwpSocket *s, pj_status_t status); 55 } PjUwpSocketCallback; 56 39 57 40 58 /* … … 45 63 public: 46 64 PjUwpSocket(int af_, int type_, int proto_); 65 virtual ~PjUwpSocket(); 66 pj_status_t InitSocket(enum PjUwpSocketType sock_type_); 67 void DeinitSocket(); 68 69 void* GetUserData() { return user_data; } 70 void SetNonBlocking(const PjUwpSocketCallback *cb_, void *user_data_) 71 { 72 is_blocking = PJ_FALSE; 73 cb=*cb_; 74 user_data = user_data_; 75 } 76 77 enum PjUwpSocketType GetType() { return sock_type; } 78 enum PjUwpSocketState GetState() { return sock_state; } 79 80 pj_sockaddr* GetLocalAddr() { return &local_addr; } 81 pj_sockaddr* GetRemoteAddr() { return &remote_addr; } 82 83 84 pj_status_t Bind(const pj_sockaddr_t *addr = NULL); 85 pj_status_t Send(const void *buf, pj_ssize_t *len); 86 pj_status_t SendTo(const void *buf, pj_ssize_t *len, const pj_sockaddr_t *to); 87 pj_status_t Recv(void *buf, pj_ssize_t *len); 88 pj_status_t RecvFrom(void *buf, pj_ssize_t *len, pj_sockaddr_t *from); 89 pj_status_t Connect(const pj_sockaddr_t *addr); 90 pj_status_t Listen(); 91 pj_status_t Accept(PjUwpSocket **new_sock); 92 93 void (*on_read)(PjUwpSocket *s, int bytes_read); 94 void (*on_write)(PjUwpSocket *s, int bytes_sent); 95 void (*on_accept)(PjUwpSocket *s, pj_status_t status); 96 void (*on_connect)(PjUwpSocket *s, pj_status_t status); 97 98 private: 47 99 PjUwpSocket* CreateAcceptSocket(Windows::Networking::Sockets::StreamSocket^ stream_sock_); 48 virtual ~PjUwpSocket(); 49 50 pj_status_t InitSocket(enum PjUwpSocketType sock_type_); 51 52 public: 100 pj_status_t SendImp(const void *buf, pj_ssize_t *len); 101 int ConsumeReadBuffer(void *buf, int max_len); 102 53 103 int af; 54 104 int type; … … 57 107 pj_sockaddr remote_addr; 58 108 pj_bool_t is_blocking; 109 pj_bool_t has_pending_bind; 110 pj_bool_t has_pending_send; 111 pj_bool_t has_pending_recv; 59 112 void *user_data; 113 PjUwpSocketCallback cb; 60 114 61 115 enum PjUwpSocketType sock_type; … … 66 120 67 121 /* Helper objects */ 68 PjUwpSocketDatagramRecvHelper^ d atagram_recv_helper;122 PjUwpSocketDatagramRecvHelper^ dgram_recv_helper; 69 123 PjUwpSocketListenerHelper^ listener_helper; 70 124 … … 72 126 Windows::Storage::Streams::DataWriter^ socket_writer; 73 127 Windows::Storage::Streams::IBuffer^ send_buffer; 74 pj_bool_t is_busy_sending; 75 76 void *read_userdata; 77 void *write_userdata; 78 void *accept_userdata; 79 80 void (*on_read)(PjUwpSocket *s, int bytes_read); 81 void (*on_write)(PjUwpSocket *s, int bytes_sent); 82 void (*on_accept)(PjUwpSocket *s, pj_status_t status); 83 void (*on_connect)(PjUwpSocket *s, pj_status_t status); 128 129 friend PjUwpSocketDatagramRecvHelper; 130 friend PjUwpSocketListenerHelper; 84 131 }; 85 132 … … 93 140 pj_sockaddr_t *sockaddr) 94 141 { 142 #if 0 95 143 char tmp_str_buf[PJ_INET6_ADDRSTRLEN+1]; 96 144 pj_assert(wcslen(waddr) < sizeof(tmp_str_buf)); … … 102 150 103 151 return PJ_SUCCESS; 152 #endif 153 char tmp_str_buf[PJ_INET6_ADDRSTRLEN+1]; 154 pj_assert(wcslen(waddr) < sizeof(tmp_str_buf)); 155 pj_unicode_to_ansi(waddr, wcslen(waddr), tmp_str_buf, sizeof(tmp_str_buf)); 156 pj_str_t remote_host; 157 pj_strset(&remote_host, tmp_str_buf, pj_ansi_strlen(tmp_str_buf)); 158 pj_sockaddr *addr = (pj_sockaddr*)sockaddr; 159 pj_bool_t got_addr = PJ_FALSE; 160 161 if (pj_inet_pton(PJ_AF_INET, &remote_host, &addr->ipv4.sin_addr) 162 == PJ_SUCCESS) 163 { 164 addr->addr.sa_family = PJ_AF_INET; 165 got_addr = PJ_TRUE; 166 } else if (pj_inet_pton(PJ_AF_INET6, &remote_host, &addr->ipv6.sin6_addr) 167 == PJ_SUCCESS) 168 { 169 addr->addr.sa_family = PJ_AF_INET6; 170 got_addr = PJ_TRUE; 171 } 172 if (!got_addr) 173 return PJ_EINVAL; 174 175 pj_sockaddr_set_port(addr, (pj_uint16_t)_wtoi(wport)); 176 return PJ_SUCCESS; 104 177 } 105 178
Note: See TracChangeset
for help on using the changeset viewer.