/** * WebRTC implementation for tiny devices * * Copyright (c) 2022 Chris Hiszpanski. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. */ #ifndef TINYRTC_H #define TINYRTC_H #define TRTC_MAX_ICE_CANDIDATE_SIZE 256 #define TRTC_MAX_ICE_SERVER_CREDENTIAL_SIZE 128 #define TRTC_MAX_ICE_SERVERS 2 #define TRTC_MAX_ICE_SERVER_URL_SIZE 128 #define TRTC_MAX_ICE_SERVER_URLS 3 #define TRTC_MAX_ICE_SERVER_USERNAME_SIZE 128 #define TRTC_MAX_ICE_CANDIDATE_USERNAME_FRAGMENT_SIZE 8 #define TRTC_MAX_ICE_CANDIDATE_SDP_MID_SIZE 32 #define TRTC_MAX_PEER_CONNECTIONS 5 #define TRTC_MAX_SDP_SIZE 4096 #define TRTC_MAX_ICE_UFRAG_SIZE 5 #define TRTC_MAX_ICE_PWD_SIZE 32 /// PRIVATE TYPE DEFINITIONS /////////////////////////////////////////////// struct trtc_peerconn_t; /// PUBLIC TYPE DEFINITIONS //////////////////////////////////////////////// struct trtc_ice_server_t { char credential[TRTC_MAX_ICE_SERVER_CREDENTIAL_SIZE]; char urls[3][TRTC_MAX_ICE_SERVER_URL_SIZE]; char username[TRTC_MAX_ICE_SERVER_USERNAME_SIZE]; }; struct trtc_config_t { struct trtc_ice_server_t ice_servers[TRTC_MAX_ICE_SERVERS]; }; struct trtc_ice_candidate_t { char candidate[TRTC_MAX_ICE_CANDIDATE_SIZE]; int sdp_mline_index; char sdp_mid[TRTC_MAX_ICE_CANDIDATE_SDP_MID_SIZE]; char username_fragment[TRTC_MAX_ICE_CANDIDATE_USERNAME_FRAGMENT_SIZE]; }; /// CALLBACKS ////////////////////////////////////////////////////////////// typedef int (trtc_on_ice_candidate_t)(const struct trtc_ice_candidate_t c, void *arg); /// RTC PEER CONNECTION API //////////////////////////////////////////////// struct trtc_peerconn_t* trtc_peer_connection(struct trtc_config_t cfg); int trtc_add_ice_candidate(struct trtc_peerconn_t *pc, const struct trtc_ice_candidate_t c); int trtc_add_track(struct trtc_peerconn_t *pc); const char * trtc_create_answer(struct trtc_peerconn_t *pc); int trtc_set_local_description(struct trtc_peerconn_t *pc, const char *sdp); int trtc_set_remote_description(struct trtc_peerconn_t *pc, const char *sdp); #endif