Ignore:
Timestamp:
Aug 25, 2007 1:36:15 PM (17 years ago)
Author:
bennylp
Message:

Implement ticket #336: custom presence status in NOTIFY/PUBLISH, supporting subset of RPID elements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r1403 r1424  
    18211821                continue; 
    18221822 
    1823             printf(" [%2d] <%7s>  %.*s\n",  
    1824                     ids[i]+1, info.status_text.ptr,  
     1823            printf(" [%2d] <%.*s>  %.*s\n",  
     1824                    ids[i]+1,  
     1825                    (int)info.status_text.slen, 
     1826                    info.status_text.ptr,  
    18251827                    (int)info.uri.slen, 
    18261828                    info.uri.ptr); 
     
    18581860    printf(" %c[%2d] %.*s: %s\n", (acc_id==current_acc?'*':' '), 
    18591861           acc_id,  (int)info.acc_uri.slen, info.acc_uri.ptr, buf); 
    1860     printf("       Online status: %s\n",  
    1861            (info.online_status ? "Online" : "Invisible")); 
     1862    printf("       Online status: %.*s\n",  
     1863        (int)info.online_status_text.slen, 
     1864        info.online_status_text.ptr); 
    18621865} 
    18631866 
     
    18881891    puts("|  m  Make new call            | +b  Add new buddy       .| +a  Add new accnt |"); 
    18891892    puts("|  M  Make multiple calls      | -b  Delete buddy         | -a  Delete accnt. |"); 
    1890     puts("|  a  Answer call              | !b  Modify buddy         | !a  Modify accnt. |"); 
    1891     puts("|  h  Hangup call  (ha=all)    |  i  Send IM              | rr  (Re-)register |"); 
    1892     puts("|  H  Hold call                |  s  Subscribe presence  | ru  Unregister    |"); 
    1893     puts("|  v  re-inVite (release hold) |  u  Unsubscribe presence |  >  Cycle next ac.|"); 
    1894     puts("|  ]  Select next dialog       |  t  ToGgle Online status |  <  Cycle prev ac.|"); 
     1893    puts("|  a  Answer call              |  i  Send IM              | !a  Modify accnt. |"); 
     1894    puts("|  h  Hangup call  (ha=all)    |  s  Subscribe presence   | rr  (Re-)register |"); 
     1895    puts("|  H  Hold call                |  u  Unsubscribe presence | ru  Unregister    |"); 
     1896    puts("|  v  re-inVite (release hold) |  t  ToGgle Online status |  >  Cycle next ac.|"); 
     1897    puts("|  ]  Select next dialog       |  T  Set online status    |  <  Cycle prev ac.|"); 
    18951898    puts("|  [  Select previous dialog   +--------------------------+-------------------+"); 
    18961899    puts("|  x  Xfer call                |      Media Commands:     |  Status & Config: |"); 
     
    20892092        return; 
    20902093    } 
     2094} 
     2095 
     2096 
     2097/* 
     2098 * Change extended online status. 
     2099 */ 
     2100static void change_online_status(void) 
     2101{ 
     2102    char menuin[32]; 
     2103    pj_bool_t online_status; 
     2104    pjrpid_element elem; 
     2105    int i, choice; 
     2106 
     2107    enum { 
     2108        AVAILABLE, BUSY, OTP, IDLE, AWAY, BRB, OFFLINE, OPT_MAX 
     2109    }; 
     2110 
     2111    struct opt { 
     2112        int id; 
     2113        char *name; 
     2114    } opts[] = { 
     2115        { AVAILABLE, "Available" }, 
     2116        { BUSY, "Busy"}, 
     2117        { OTP, "On the phone"}, 
     2118        { IDLE, "Idle"}, 
     2119        { AWAY, "Away"}, 
     2120        { BRB, "Be right back"}, 
     2121        { OFFLINE, "Offline"} 
     2122    }; 
     2123 
     2124    printf("\n" 
     2125           "Choices:\n"); 
     2126    for (i=0; i<PJ_ARRAY_SIZE(opts); ++i) { 
     2127        printf("  %d  %s\n", opts[i].id+1, opts[i].name); 
     2128    } 
     2129 
     2130    if (!simple_input("Select status", menuin, sizeof(menuin))) 
     2131        return; 
     2132 
     2133    choice = atoi(menuin) - 1; 
     2134    if (choice < 0 || choice >= OPT_MAX) { 
     2135        puts("Invalid selection"); 
     2136        return; 
     2137    } 
     2138 
     2139    pj_bzero(&elem, sizeof(elem)); 
     2140    elem.type = PJRPID_ELEMENT_TYPE_PERSON; 
     2141 
     2142    online_status = PJ_TRUE; 
     2143 
     2144    switch (choice) { 
     2145    case AVAILABLE: 
     2146        break; 
     2147    case BUSY: 
     2148        elem.activity = PJRPID_ACTIVITY_BUSY; 
     2149        elem.note = pj_str("Busy"); 
     2150        break; 
     2151    case OTP: 
     2152        elem.activity = PJRPID_ACTIVITY_BUSY; 
     2153        elem.note = pj_str("On the phone"); 
     2154        break; 
     2155    case IDLE: 
     2156        elem.activity = PJRPID_ACTIVITY_UNKNOWN; 
     2157        elem.note = pj_str("Idle"); 
     2158        break; 
     2159    case AWAY: 
     2160        elem.activity = PJRPID_ACTIVITY_AWAY; 
     2161        elem.note = pj_str("Away"); 
     2162        break; 
     2163    case BRB: 
     2164        elem.activity = PJRPID_ACTIVITY_UNKNOWN; 
     2165        elem.note = pj_str("Be right back"); 
     2166        break; 
     2167    case OFFLINE: 
     2168        online_status = PJ_FALSE; 
     2169        break; 
     2170    } 
     2171 
     2172    pjsua_acc_set_online_status2(current_acc, online_status, &elem); 
    20912173} 
    20922174 
     
    28032885            break; 
    28042886 
     2887        case 'T': 
     2888            change_online_status(); 
     2889            break; 
     2890 
    28052891        case 'c': 
    28062892            switch (menuin[1]) { 
Note: See TracChangeset for help on using the changeset viewer.