mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-10-31 07:34:45 +00:00 
			
		
		
		
	Can request call offer
This commit is contained in:
		| @@ -15,7 +15,7 @@ use crate::api_data::user_calls_config::UserCallsConfig; | ||||
| use crate::controllers::routes::RequestResult; | ||||
| use crate::controllers::user_ws_controller; | ||||
| use crate::data::base_request_handler::BaseRequestHandler; | ||||
| use crate::data::call_signal::{CallSignal, IceCandidate, NewUserCallSignal, SdpType}; | ||||
| use crate::data::call_signal::{CallSignal, IceCandidate, NewUserCallSignal, SdpType, UserCallOfferRequest}; | ||||
| use crate::data::config::conf; | ||||
| use crate::data::conversation::ConvID; | ||||
| use crate::data::error::{ExecError, Res}; | ||||
| @@ -290,6 +290,25 @@ pub fn mark_user_ready(r: &mut UserWsRequestHandler) -> Res { | ||||
|     r.success("Information propagated.") | ||||
| } | ||||
|  | ||||
| /// Request an offer from the server | ||||
| pub fn request_offer(r: &mut UserWsRequestHandler) -> Res { | ||||
|     let call_id = r.post_call_id("callID")?; | ||||
|  | ||||
|     // The ID of the user we stream the audio / video from | ||||
|     let peer_id = r.post_call_peer_id(&call_id, "peerID")?; | ||||
|  | ||||
|     if !peer_id.is_valid() || peer_id == r.user_id_ref()? { | ||||
|         r.forbidden("You can not request an offer for yourself!".to_string())?; | ||||
|     } | ||||
|  | ||||
|     events_helper::propagate_event(&Event::UserRequestedCallOffer(&UserCallOfferRequest { | ||||
|         call_hash: gen_call_hash(&call_id, &peer_id), | ||||
|         user_id: r.user_id()?, | ||||
|     }))?; | ||||
|  | ||||
|     r.success("Request sent") | ||||
| } | ||||
|  | ||||
|  | ||||
| /// Make the user leave the call | ||||
| pub fn make_user_leave_call(conv_id: &ConvID, connection: &UserWsConnection) -> Res { | ||||
|   | ||||
| @@ -60,6 +60,14 @@ struct CallUserSignal { | ||||
|     data: CallUserSignalData, | ||||
| } | ||||
|  | ||||
| #[allow(non_snake_case)] | ||||
| #[derive(Serialize)] | ||||
| struct OfferRequest { | ||||
|     title: String, | ||||
|     callHash: String, | ||||
|     peerId: String, | ||||
| } | ||||
|  | ||||
| /// Current WebSocket connection | ||||
| static mut ACTIVE_RTC_CONNECTION: Option<Addr<RtcRelayActor>> = None; | ||||
|  | ||||
| @@ -277,6 +285,14 @@ pub fn handle_event(e: &events_helper::Event) -> Res { | ||||
|             })?; | ||||
|         } | ||||
|  | ||||
|         Event::UserRequestedCallOffer(request) => { | ||||
|             send_message_to_relay(OfferRequest { | ||||
|                 title: "request_offer".to_string(), | ||||
|                 callHash: request.call_hash.to_string(), | ||||
|                 peerId: request.user_id.id().to_string(), | ||||
|             })?; | ||||
|         } | ||||
|  | ||||
|         _ => {} | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -44,6 +44,7 @@ pub fn get_user_ws_routes() -> Vec<UserWsRoute> { | ||||
|         UserWsRoute::new("calls/members", calls_controller::get_members_list), | ||||
|         UserWsRoute::new("calls/signal", calls_controller::on_client_signal), | ||||
|         UserWsRoute::new("calls/mark_ready", calls_controller::mark_user_ready), | ||||
|         UserWsRoute::new("calls/request_offer", calls_controller::request_offer), | ||||
|     ] | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -42,6 +42,12 @@ pub struct NewRtcRelayMessage { | ||||
|     pub data: String, | ||||
| } | ||||
|  | ||||
| /// Request of a user for a call | ||||
| pub struct UserCallOfferRequest { | ||||
|     pub call_hash: String, | ||||
|     pub user_id: UserID, | ||||
| } | ||||
|  | ||||
| impl SdpType { | ||||
|     pub fn from_str(val: &str) -> Res<SdpType> { | ||||
|         match val { | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|  | ||||
| use crate::controllers::{calls_controller, comments_controller, conversations_controller, notifications_controller, rtc_relay_controller, user_ws_controller}; | ||||
| use crate::data::api_client::APIClient; | ||||
| use crate::data::call_signal::{NewRtcRelayMessage, NewUserCallSignal}; | ||||
| use crate::data::call_signal::{NewRtcRelayMessage, NewUserCallSignal, UserCallOfferRequest}; | ||||
| use crate::data::comment::Comment; | ||||
| use crate::data::conversation::ConvID; | ||||
| use crate::data::conversation_message::ConversationMessage; | ||||
| @@ -62,6 +62,9 @@ pub enum Event<'a> { | ||||
|     /// Got a new RTC relay message | ||||
|     NewRTCRelayMessage(&'a NewRtcRelayMessage), | ||||
|  | ||||
|     /// User requested an offer for a call | ||||
|     UserRequestedCallOffer(&'a UserCallOfferRequest), | ||||
|  | ||||
|     /// No event | ||||
|     None, | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user