00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PJ_ASYNCSOCK_H__
00021 #define __PJ_ASYNCSOCK_H__
00022
00028 #include <pj/ioqueue.h>
00029 #include <pj/sock.h>
00030
00031
00032 PJ_BEGIN_DECL
00033
00051 typedef struct pj_activesock_t pj_activesock_t;
00052
00056 typedef struct pj_activesock_cb
00057 {
00084 pj_bool_t (*on_data_read)(pj_activesock_t *asock,
00085 void *data,
00086 pj_size_t size,
00087 pj_status_t status,
00088 pj_size_t *remainder);
00109 pj_bool_t (*on_data_recvfrom)(pj_activesock_t *asock,
00110 void *data,
00111 pj_size_t size,
00112 const pj_sockaddr_t *src_addr,
00113 int addr_len,
00114 pj_status_t status);
00115
00129 pj_bool_t (*on_data_sent)(pj_activesock_t *asock,
00130 pj_ioqueue_op_key_t *send_key,
00131 pj_ssize_t sent);
00132
00147 pj_bool_t (*on_accept_complete)(pj_activesock_t *asock,
00148 pj_sock_t newsock,
00149 const pj_sockaddr_t *src_addr,
00150 int src_addr_len);
00151
00164 pj_bool_t (*on_connect_complete)(pj_activesock_t *asock,
00165 pj_status_t status);
00166
00167 } pj_activesock_cb;
00168
00169
00174 typedef struct pj_activesock_cfg
00175 {
00188 unsigned async_cnt;
00189
00203 int concurrency;
00204
00218 pj_bool_t whole_data;
00219
00220 } pj_activesock_cfg;
00221
00222
00228 PJ_DECL(void) pj_activesock_cfg_default(pj_activesock_cfg *cfg);
00229
00230
00253 PJ_DECL(pj_status_t) pj_activesock_create(pj_pool_t *pool,
00254 pj_sock_t sock,
00255 int sock_type,
00256 const pj_activesock_cfg *opt,
00257 pj_ioqueue_t *ioqueue,
00258 const pj_activesock_cb *cb,
00259 void *user_data,
00260 pj_activesock_t **p_asock);
00261
00284 PJ_DECL(pj_status_t) pj_activesock_create_udp(pj_pool_t *pool,
00285 const pj_sockaddr *addr,
00286 const pj_activesock_cfg *opt,
00287 pj_ioqueue_t *ioqueue,
00288 const pj_activesock_cb *cb,
00289 void *user_data,
00290 pj_activesock_t **p_asock,
00291 pj_sockaddr *bound_addr);
00292
00293
00303 PJ_DECL(pj_status_t) pj_activesock_close(pj_activesock_t *asock);
00304
00305 #if (defined(PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT) && \
00306 PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0) || \
00307 defined(DOXYGEN)
00308
00321 PJ_DECL(void) pj_activesock_set_iphone_os_bg(pj_activesock_t *asock,
00322 int val);
00323
00337 PJ_DECL(void) pj_activesock_enable_iphone_os_bg(pj_bool_t val);
00338 #endif
00339
00352 PJ_DECL(pj_status_t) pj_activesock_set_user_data(pj_activesock_t *asock,
00353 void *user_data);
00354
00363 PJ_DECL(void*) pj_activesock_get_user_data(pj_activesock_t *asock);
00364
00365
00388 PJ_DECL(pj_status_t) pj_activesock_start_read(pj_activesock_t *asock,
00389 pj_pool_t *pool,
00390 unsigned buff_size,
00391 pj_uint32_t flags);
00392
00407 PJ_DECL(pj_status_t) pj_activesock_start_read2(pj_activesock_t *asock,
00408 pj_pool_t *pool,
00409 unsigned buff_size,
00410 void *readbuf[],
00411 pj_uint32_t flags);
00412
00426 PJ_DECL(pj_status_t) pj_activesock_start_recvfrom(pj_activesock_t *asock,
00427 pj_pool_t *pool,
00428 unsigned buff_size,
00429 pj_uint32_t flags);
00430
00445 PJ_DECL(pj_status_t) pj_activesock_start_recvfrom2(pj_activesock_t *asock,
00446 pj_pool_t *pool,
00447 unsigned buff_size,
00448 void *readbuf[],
00449 pj_uint32_t flags);
00450
00471 PJ_DECL(pj_status_t) pj_activesock_send(pj_activesock_t *asock,
00472 pj_ioqueue_op_key_t *send_key,
00473 const void *data,
00474 pj_ssize_t *size,
00475 unsigned flags);
00476
00498 PJ_DECL(pj_status_t) pj_activesock_sendto(pj_activesock_t *asock,
00499 pj_ioqueue_op_key_t *send_key,
00500 const void *data,
00501 pj_ssize_t *size,
00502 unsigned flags,
00503 const pj_sockaddr_t *addr,
00504 int addr_len);
00505
00506 #if PJ_HAS_TCP
00507
00526 PJ_DECL(pj_status_t) pj_activesock_start_accept(pj_activesock_t *asock,
00527 pj_pool_t *pool);
00528
00546 PJ_DECL(pj_status_t) pj_activesock_start_connect(pj_activesock_t *asock,
00547 pj_pool_t *pool,
00548 const pj_sockaddr_t *remaddr,
00549 int addr_len);
00550
00551 #endif
00552
00557 PJ_END_DECL
00558
00559 #endif
00560