@@ -591,7 +591,95 @@ void TinyPhoneHttpServer::Start() {
591591 return tp::response (200 , response);
592592 }
593593 });
594-
594+
595+ CROW_ROUTE (app, " /calls/<int>/join/<int>" )
596+ .methods (" POST" _method)
597+ ([&phone](int call_id, int call_to_join_id) {
598+ pj_thread_auto_register ();
599+
600+ SIPCall* call = phone.CallById (call_id);
601+ SIPCall* call_to_join = phone.CallById (call_to_join_id);
602+
603+ if (call == nullptr ) {
604+ return tp::response (400 , {
605+ { " message" , " Current Call Not Found" },
606+ { " call_id" , call_id },
607+ { " call_to_join_id" , call_to_join_id },
608+ });
609+ }
610+ else if (call_to_join == nullptr ) {
611+ return tp::response (400 , {
612+ { " message" , " Call To Join Not Found" },
613+ { " call_id" , call_id },
614+ { " call_to_join_id" , call_to_join_id }
615+ });
616+ }
617+ else if (call->HoldState () == +HoldStatus::LOCAL_HOLD) {
618+ json response = {
619+ { " message" , " Bad Request, CallOnHold Currently" },
620+ { " call_id" , call_id },
621+ { " call_to_join_id" , call_to_join_id },
622+ { " status" , " 400" }
623+ };
624+
625+ return tp::response (400 , response);
626+ }
627+ else {
628+ json response = {
629+ { " message" , " Calls Join Triggered" },
630+ { " call_id" , call_id },
631+ { " call_to_join_id" , call_to_join_id },
632+ { " response" , phone.Join (call, call_to_join) }
633+ };
634+
635+ return tp::response (200 , response);
636+ }
637+ });
638+
639+ CROW_ROUTE (app, " /calls/<int>/unjoin/<int>" )
640+ .methods (" POST" _method)
641+ ([&phone](int call_id, int call_to_unjoin_id) {
642+ pj_thread_auto_register ();
643+
644+ SIPCall* call = phone.CallById (call_id);
645+ SIPCall* call_to_unjoin = phone.CallById (call_to_unjoin_id);
646+
647+ if (call == nullptr ) {
648+ return tp::response (400 , {
649+ { " message" , " Current Call Not Found" },
650+ { " call_id" , call_id },
651+ { " call_to_unjoin_id" , call_to_unjoin_id },
652+ });
653+ }
654+ else if (call_to_unjoin == nullptr ) {
655+ return tp::response (400 , {
656+ { " message" , " Call To Unjoin Not Found" },
657+ { " call_id" , call_id },
658+ { " call_to_unjoin_id" , call_to_unjoin_id }
659+ });
660+ }
661+ else if (call->HoldState () == +HoldStatus::LOCAL_HOLD) {
662+ json response = {
663+ { " message" , " Bad Request, CallOnHold Currently" },
664+ { " call_id" , call_id },
665+ { " call_to_unjoin_id" , call_to_unjoin_id },
666+ { " status" , " 400" }
667+ };
668+
669+ return tp::response (400 , response);
670+ }
671+ else {
672+ json response = {
673+ { " message" , " Calls Unjoin Triggered" },
674+ { " call_id" , call_id },
675+ { " call_to_unjoin_id" , call_to_unjoin_id },
676+ { " response" , phone.Unjoin (call, call_to_unjoin) }
677+ };
678+
679+ return tp::response (200 , response);
680+ }
681+ });
682+
595683 CROW_ROUTE (app, " /calls/<int>/transfer" )
596684 .methods (" POST" _method)
597685 ([&phone](const crow::request& req, int call_id) {
0 commit comments