2012-09-19 44 views
6

कोई भी संदेश प्राप्त करने के लिए pjsip क्लाइंट को सेटअप करने के तरीके पर कोई भी अच्छा उदाहरण जानता है। किसी भी नंबर परpjsip एसएमएस प्राप्त करता है

pjsua_im_send(sip_acc_id, &to, NULL, &msgbody, NULL, NULL); 

: मैं का उपयोग कर ग्राहक से संदेश भेज सकते हैं।

लेकिन मुझे नहीं पता कि पहले से पंजीकृत एसआईपी खाते में संदेश प्राप्त करने के लिए क्या करना है।

किसी भी जानकारी की सराहना की जाएगी।

नोट: मैं केवल पीजीएसआईपी और कोई अन्य लाइब्रेरी का उपयोग नहीं कर सकता।

संपादित करें: कुछ नए सामान मैंने पाया:

http://trac.pjsip.org/repos/ticket/1070

http://www.pjsip.org/release/0.5.4/PJSIP-Dev-Guide.pdf (लेकिन सभी इस दस्तावेज़ भेजे msgs के बारे में कहते हैं यह है:

16.1.2 संदेश

प्राप्त करना

किसी भी संवाद के बाहर आने वाले संदेश अनुरोध आवेदनद्वारा प्राप्त किए जाएंगेमॉड्यूल। किसी संवाद के अंदर आने वाले संदेश अनुरोधों को on_tsx_state() संवाद के कॉलबैक के माध्यम से संवाद उपयोग के लिए अधिसूचित किया जाएगा।

जो अभी भी आने वाले संदेशों को संभालने के तरीके पर बहुत अधिक प्रकाश नहीं डालता है।

http://www.ietf.org/rfc/rfc3261.txt

http://trac.pjsip.org/repos/wiki/SIP_Message_Buffer_Event

EDIT2: मुझे बताया गया है on_pager समारोह इस कार्यक्षमता के लिए इस्तेमाल किए जाने की आवश्यकता है। तो मैंने कोशिश की लेकिन दुर्भाग्य से अभी भी कोई सफलता नहीं है।

यहाँ मैं क्या किया है:

/* Initialize application callbacks */ 
    app_config->cfg.cb.on_call_state = &on_call_state; 
    app_config->cfg.cb.on_call_media_state = &on_call_media_state; 
    app_config->cfg.cb.on_incoming_call = &on_incoming_call; 
    app_config->cfg.cb.on_reg_state = &on_reg_state; 
    app_config->cfg.cb.on_pager = &on_pager; 

और on_pager कार्यान्वयन:

static void on_pager(pjsua_call_id call_id, const pj_str_t *from, const pj_str_t *to, const pj_str_t *contact, const pj_str_t *mime_type, const pj_str_t *body) { 

    NSLog(@"**************** on_pager called **********************"); 
    AppDelegate *app = (AppDelegate *)[AppDelegate sharedApplication]; 

    pjsua_call_info ci; 

    pjsua_call_get_info(call_id, &ci); 

    PJ_UNUSED_ARG(call_id); 
    PJ_UNUSED_ARG(to); 
    PJ_UNUSED_ARG(contact); 
    PJ_UNUSED_ARG(mime_type); 

    [app ring]; 

    //PJ_LOG(3,(THIS_FILE, "MESSAGE from %.*s: %.*s (%.*s)", (int)from->slen, from->ptr, (int)text->slen, text->ptr, (int)mime_type->slen, mime_type->ptr)); 

    postMessageStateNotification(call_id, &ci); 

} 

मैं on_pager कॉल करने के लिए जब एक संदेश प्राप्त हुआ है, लेकिन उसने ऐसा नहीं किया आवेदन उम्मीद कर रहा था। on_incoming_call हालांकि, कॉल किया जाता है।

उत्तर

6

बाहर निकलता है, मैंने जो किया वह सही था, और यह सर्वर के साथ बस एक मुद्दा था। संदेश प्राप्त करना अब काम कर रहा है!

यह निष्कर्ष निकालने के लिए, मूल रूप से:

जब घूंट के लिए पंजीकरण:

app_config->cfg.cb.on_pager = &on_pager; 

कि on_pager() फ़ंक्शन के लिए रजिस्टर करेंगे एक एसएमएस प्राप्त करने का आह्वान किया जाना है। शेष आप पर निर्भर है कि उस समारोह के अंदर क्या करना है।

static void on_pager(pjsua_call_id call_id, const pj_str_t *from, const pj_str_t *to, const pj_str_t *contact, const pj_str_t *mime_type, const pj_str_t *body) 

मुझे लगता है कि सब कुछ समारोह मापदंडों के लिए आत्म व्याख्यात्मक है, आदि की कोशिश कर के लिए हर किसी को वैसे भी धन्यवाद:

इस समारोह हेडर है!

और app_config pjsua_init() फ़ंक्शन के अंदर पास हो गया है।

इसके अलावा, sipStartup() में हम आईओएस के लिए एनएसएनोटिफिकेशन फ़ंक्शन पंजीकृत करते हैं।

/***** SIP ********/ 
/* */ 
- (BOOL)sipStartup 
{ 
    kSIPCallState   = @"CallState"; 
    kSIPRegState   = @"RegState"; 
    kSIPMwiInfo   = @"MWIInfo"; 

    if (_app_config.pool) 
     return YES; 

    self.networkActivityIndicatorVisible = YES; 

    if (sip_startup(&_app_config) != PJ_SUCCESS) 
    { 
     self.networkActivityIndicatorVisible = NO; 
     return NO; 
    } 
    self.networkActivityIndicatorVisible = NO; 

    CTTelephonyNetworkInfo *phoneInfo = [[CTTelephonyNetworkInfo alloc] init]; 
    CTCarrier *phoneCarrier = [phoneInfo subscriberCellularProvider]; 
    NSLog(@"Carrier = %@", phoneCarrier); 

    [self checkForConnection]; 

    NSTimer *timer; 
    receiveCallTask = [[UIApplication sharedApplication] 
         beginBackgroundTaskWithExpirationHandler:^{ 

         }]; 

    //timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(checkForConnection) userInfo:nil repeats:YES]; 


    /** Call management **/ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(processCallState:) 
               name: kSIPCallState object:nil]; 

    /** Registration management */ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(processRegState:) 
               name: kSIPRegState object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(processMessageState:) 
               name:kSIPMwiInfo object:nil]; 

    return YES; 
} 

और processMessageState: नीचे है:

- (void)processMessageState:(NSNotification *)notification 
{ 
    NSLog(@"*****  processMessageState is called  *****"); 
    NSNumber *value = [[ notification userInfo] objectForKey:@"CallID"]; 
    pjsua_call_id callId = [value intValue]; 

    int state = [[[ notification userInfo] objectForKey:@"Event"] intValue]; 

    switch (state) { 
     case PJSIP_EVENT_UNKNOWN: 
      NSLog(@"unknown event"); 
      break; 
     case PJSIP_EVENT_TIMER: 
      NSLog(@"timer event"); 
      break; 
     case PJSIP_EVENT_RX_MSG: 
      NSLog(@"received --> rx_msg"); 
      break; 
     case PJSIP_EVENT_TX_MSG: 
      NSLog(@"tx_msg"); 
      break; 
     case PJSIP_EVENT_TRANSPORT_ERROR: 
      NSLog(@"msg transport error"); 
      break; 
     case PJSIP_EVENT_TSX_STATE: 
      NSLog(@"event tsx state"); 
      break; 
     case PJSIP_EVENT_USER: 
      NSLog(@"event user"); 
      break; 
     default: 
      NSLog(@"processMessageState was called"); 
      break; 
    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^