Ignore:
Timestamp:
May 17, 2009 5:57:19 PM (15 years ago)
Author:
bennylp
Message:

Ticket #851: initial code to support regular nomination in ICE:

  • Added option to change nomination strategy in ICE strans and session. Default is still aggressive.
  • Added option to control nomination timer
  • Renamed no_host_cand to max_host_cands in ICE config
  • Updated icedemo
  • Also added timer for controlled agent to wait for nomination from controlling agent
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/sipit24/pjnath/include/pjnath/ice_session.h

    r2642 r2705  
    177177{ 
    178178    /** 
    179      * The pointer to ICE check which was nominated for this component. 
    180      * The value will be NULL if a nominated check has not been found 
    181      * for this component. 
     179     * Pointer to ICE check with highest priority which connectivity check 
     180     * has been successful. The value will be NULL if a no successful check 
     181     * has not been found for this component. 
    182182     */ 
    183183    pj_ice_sess_check   *valid_check; 
     184 
     185    /** 
     186     * Pointer to ICE check with highest priority which connectivity check 
     187     * has been successful and it has been nominated. The value may be NULL 
     188     * if there is no such check yet. 
     189     */ 
     190    pj_ice_sess_check   *nominated_check; 
    184191 
    185192    /** 
     
    554561 
    555562/** 
     563 * This structure describes various ICE session options. Application 
     564 * configure the ICE session with these options by calling  
     565 * #pj_ice_sess_set_options(). 
     566 */ 
     567typedef struct pj_ice_sess_options 
     568{ 
     569    /** 
     570     * Specify whether to use aggressive nomination. 
     571     */ 
     572    pj_bool_t           aggressive; 
     573 
     574    /** 
     575     * For controlling agent if it uses regular nomination, specify the delay 
     576     * to perform nominated check (connectivity check with USE-CANDIDATE  
     577     * attribute) after all components have a valid pair. 
     578     * 
     579     * Default value is PJ_ICE_NOMINATED_CHECK_DELAY. 
     580     */ 
     581    unsigned            nominated_check_delay; 
     582 
     583    /** 
     584     * For a controlled agent, specify how long it wants to wait (in  
     585     * milliseconds) for the controlling agent to complete sending  
     586     * connectivity check with nominated flag set to true for all components 
     587     * after the controlled agent has found that all connectivity checks in 
     588     * its checklist have been completed and there is at least one successful 
     589     * (but not nominated) check for every component. 
     590     * 
     591     * Default value for this option is  
     592     * ICE_CONTROLLED_AGENT_WAIT_NOMINATION_TIMEOUT. Specify -1 to disable 
     593     * this timer. 
     594     */ 
     595    int                 controlled_agent_want_nom_timeout; 
     596 
     597} pj_ice_sess_options; 
     598 
     599 
     600/** 
    556601 * This structure describes the ICE session. For this version of PJNATH, 
    557602 * an ICE session corresponds to a single media stream (unlike the ICE 
     
    570615    pj_mutex_t          *mutex;                     /**< Mutex.             */ 
    571616    pj_ice_sess_role     role;                      /**< ICE role.          */ 
     617    pj_ice_sess_options  opt;                       /**< Options            */ 
    572618    pj_timestamp         tie_breaker;               /**< Tie breaker value  */ 
    573619    pj_uint8_t          *prefs;                     /**< Type preference.   */ 
     620    pj_bool_t            is_nominating;             /**< Nominating stage   */ 
    574621    pj_bool_t            is_complete;               /**< Complete?          */ 
    575622    pj_status_t          ice_status;                /**< Error status.      */ 
    576     pj_timer_entry       completion_timer;          /**< To call callback.  */ 
     623    pj_timer_entry       timer;                     /**< ICE timer.         */ 
    577624    pj_ice_sess_cb       cb;                        /**< Callback.          */ 
    578625 
     
    655702                                     const pj_sockaddr *base_addr); 
    656703 
     704/** 
     705 * Initialize ICE session options with library default values. 
     706 * 
     707 * @param opt           ICE session options. 
     708 */ 
     709PJ_DECL(void) pj_ice_sess_options_default(pj_ice_sess_options *opt); 
    657710 
    658711/** 
     
    690743 
    691744/** 
     745 * Get the value of various options of the ICE session. 
     746 * 
     747 * @param ice           The ICE session. 
     748 * @param opt           The options to be initialized with the values 
     749 *                      from the ICE session. 
     750 * 
     751 * @return              PJ_SUCCESS on success, or the appropriate error. 
     752 */ 
     753PJ_DECL(pj_status_t) pj_ice_sess_get_options(pj_ice_sess *ice, 
     754                                             pj_ice_sess_options *opt); 
     755 
     756/** 
     757 * Specify various options for this ICE session. Application MUST only 
     758 * call this function after the ICE session has been created but before 
     759 * any connectivity check is started. 
     760 * 
     761 * Application should call #pj_ice_sess_get_options() to initialize the 
     762 * options with their default values. 
     763 * 
     764 * @param ice           The ICE session. 
     765 * @param opt           Options to be applied to the ICE session. 
     766 * 
     767 * @return              PJ_SUCCESS on success, or the appropriate error. 
     768 */ 
     769PJ_DECL(pj_status_t) pj_ice_sess_set_options(pj_ice_sess *ice, 
     770                                             const pj_ice_sess_options *opt); 
     771 
     772/** 
    692773 * Destroy ICE session. This will cancel any connectivity checks currently 
    693774 * running, if any, and any other events scheduled by this session, as well 
Note: See TracChangeset for help on using the changeset viewer.