diff options
| author | Anton <anton@picapica.im> | 2025-04-11 18:43:41 +0400 |
|---|---|---|
| committer | Anton <anton@picapica.im> | 2025-04-11 18:43:41 +0400 |
| commit | 804a917df338d7e8403c729885d60195dfb65c5d (patch) | |
| tree | eb7734d82c56300a4d1b1dc9e95382919dfd089a /PICA_client.c | |
| parent | bac29a930f2cd5825f6edb400d87eea2171b0cc1 (diff) | |
| download | pica-pica-804a917df338d7e8403c729885d60195dfb65c5d.tar.gz pica-pica-804a917df338d7e8403c729885d60195dfb65c5d.zip | |
pica-client: call related protocol message handlers, work in progress
Diffstat (limited to 'PICA_client.c')
| -rw-r--r-- | PICA_client.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/PICA_client.c b/PICA_client.c index 14d2082..4f814db 100644 --- a/PICA_client.c +++ b/PICA_client.c @@ -3403,6 +3403,85 @@ int PICA_send_file_fragment(struct PICA_c2c *chn) return PICA_OK; } + +int PICA_start_call(struct PICA_c2c *chn) +{ + struct PICA_proto_msg *mp; + + if (chn->call_state != PICA_CALL_STATE_IDLE) + return PICA_ERRCALLINPROGRESS; + + if ((mp = c2c_writebuf_push(chn, PICA_PROTO_CALLREQ, PICA_PROTO_CALLREQ_SIZE))) + { + RAND_pseudo_bytes(mp->tail, 2); + } + else + { + return PICA_ERRNOMEM; + } + + return PICA_OK; +} + +int PICA_pickup_call(struct PICA_c2c *chn) +{ + struct PICA_proto_msg *mp; + + if (chn->call_state != PICA_CALL_STATE_INCOMINGCALL) + return PICA_ERRCALLNOTINPROGRESS; + + if ((mp = c2c_writebuf_push(chn, PICA_PROTO_CALLANS, PICA_PROTO_CALLANS_SIZE))) + { + RAND_pseudo_bytes(mp->tail, 2); + } + else + { + return PICA_ERRNOMEM; + } + + return PICA_OK; +} + +int PICA_reject_call(struct PICA_c2c *chn) +{ + struct PICA_proto_msg *mp; + + if (chn->call_state != PICA_CALL_STATE_INCOMINGCALL) + return PICA_ERRCALLNOTINPROGRESS; + + if ((mp = c2c_writebuf_push(chn, PICA_PROTO_CALLREJ, PICA_PROTO_CALLREJ_SIZE))) + { + RAND_pseudo_bytes(mp->tail, 2); + } + else + { + return PICA_ERRNOMEM; + } + + return PICA_OK; +} + +int PICA_hangup_call(struct PICA_c2c *chn) +{ + struct PICA_proto_msg *mp; + + if (chn->call_state != PICA_CALL_STATE_ACTIVE) + return PICA_ERRCALLNOTINPROGRESS; + + if ((mp = c2c_writebuf_push(chn, PICA_PROTO_CALLFIN, PICA_PROTO_CALLFIN_SIZE))) + { + RAND_pseudo_bytes(mp->tail, 2); + } + else + { + return PICA_ERRNOMEM; + } + + // release call resources?? + // handle incoming last stream packets? + return PICA_OK; +} + void PICA_close_directc2c(struct PICA_directc2c *d) { PICA_TRACEFUNC |
