From 804a917df338d7e8403c729885d60195dfb65c5d Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 11 Apr 2025 18:43:41 +0400 Subject: pica-client: call related protocol message handlers, work in progress --- PICA_client.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) (limited to 'PICA_client.c') 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 -- cgit v1.2.1