コード例 #1
0
ファイル: main.c プロジェクト: xgenvn/tinysip
static pj_status_t register_account(pj_cli_cmd_val *cval) {
    {
        print_msg(("", "Registering account sip:%.*s@%.*s  ... ",
                   (int)cval->argv[1].slen, cval->argv[1].ptr,
                   (int)cval->argv[3].slen, cval->argv[3].ptr));

        pjsua_acc_config cfg;
        pj_status_t status;

        pjsua_acc_config_default(&cfg);
        pj_str_t acc_name = cval->argv[1];
        pj_str_t acc_pwd = cval->argv[2];
        pj_str_t acc_domain = cval->argv[3];

        char buff1[acc_name.slen+acc_domain.slen+20];
        pj_str_t id;
        id.ptr = buff1;
        pj_bzero(buff1, sizeof(buff1));
        pj_strcat2(&id, "sip:");
        pj_strcat(&id, &acc_name);
        pj_strcat2(&id, "@");
        pj_strcat(&id, &acc_domain);

        char buff2[acc_domain.slen+20];
        pj_str_t reg_uri;
        reg_uri.ptr = buff2;
        pj_bzero(buff2, sizeof(buff2));
        pj_strcat2(&reg_uri, "sip:");
        pj_strcat(&reg_uri, &acc_domain);

//        char id[acc_name.slen+acc_domain.slen+10];
//        char reg_uri[acc_domain.slen+10];
//        pj_ansi_sprintf(id, "sip:%s@%s",
//                acc_name.ptr, acc_domain.ptr);
//        pj_ansi_sprintf(reg_uri, "sip:%s",
//                acc_domain.ptr);

        cfg.id = id;
        cfg.reg_uri = reg_uri;
        cfg.cred_count = 1;
        cfg.cred_info[0].realm = pj_str("*"); //or set to acc_domain
        cfg.cred_info[0].scheme = pj_str("digest");
        cfg.cred_info[0].username = acc_name;
        cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
        cfg.cred_info[0].data = acc_pwd;

        status = pjsua_acc_add(&cfg, PJ_TRUE, &main_account);
        printf("done \r\n");
        if (status != PJ_SUCCESS)
            error_exit("Error adding account", status);
    }
    return PJ_SUCCESS;
}
コード例 #2
0
ファイル: cli.c プロジェクト: ClearwaterCore/pjsip-upstream
/* Check if command already added to command hash */
static pj_bool_t cmd_name_exists(pj_cli_t *cli, pj_cli_cmd_spec *group, 
				 pj_str_t *cmd)
{
    pj_str_t cmd_val;
    char cmd_ptr[64];

    cmd_val.ptr = &cmd_ptr[0];
    cmd_val.slen = 0;

    if (group) {
	char cmd_str[16];
	pj_ansi_sprintf(&cmd_str[0], "%d", group->id);
	pj_strcat2(&cmd_val, &cmd_str[0]);	
    }
    pj_strcat(&cmd_val, cmd);
    return (pj_hash_get(cli->cmd_name_hash, 
	                cmd_val.ptr, cmd_val.slen, NULL) != 0);
}
コード例 #3
0
ファイル: pjsip_sipclf.c プロジェクト: 0x0B501E7E/CSipSimple
/* TODO : pass a max len for the line2 buffer */
static pj_status_t sipclf_add_timestamp(pj_str_t* line2, pj_time_val ts)
{
    char* line2ptr = line2->ptr;
    line2ptr += line2->slen;

    // sec since epoch
    pj_utoa_pad(ts.sec, line2ptr, TIMESTAMP_SEC_LEN, '0');
    line2->slen += TIMESTAMP_SEC_LEN;
    line2ptr += TIMESTAMP_SEC_LEN;
    // dot
    pj_strcat2(line2, ".");
    line2ptr++;
    // ms
    pj_utoa_pad(ts.msec, line2ptr, TIMESTAMP_MSEC_LEN, '0');
    line2->slen += TIMESTAMP_MSEC_LEN;
    line2ptr += TIMESTAMP_MSEC_LEN;

    return PJ_SUCCESS;
}
コード例 #4
0
ファイル: cli.c プロジェクト: Jetsly/pjsip-csharp
/* Get the command from the command hash */
static pj_cli_cmd_spec *get_cmd_name(const pj_cli_t *cli, 
				     const pj_cli_cmd_spec *group, 
				     const pj_str_t *cmd)
{
    pj_str_t cmd_val;
    char cmd_ptr[MAX_CMD_HASH_NAME_LENGTH];

    cmd_val.ptr = cmd_ptr;
    cmd_val.slen = 0;

    if (group) {
	char cmd_str[MAX_CMD_ID_LENGTH];
	pj_ansi_sprintf(cmd_str, "%d", group->id);
	pj_strcat2(&cmd_val, cmd_str);	
    }
    pj_strcat(&cmd_val, cmd);
    return (pj_cli_cmd_spec *)pj_hash_get(cli->cmd_name_hash, cmd_val.ptr, 
					  (unsigned)cmd_val.slen, NULL);
}
コード例 #5
0
ファイル: cli.c プロジェクト: Jetsly/pjsip-csharp
/* Add command to the command hash */
static void add_cmd_name(pj_cli_t *cli, pj_cli_cmd_spec *group, 
			 pj_cli_cmd_spec *cmd, pj_str_t *cmd_name)
{
    pj_str_t cmd_val;
    pj_str_t add_cmd;
    char cmd_ptr[MAX_CMD_HASH_NAME_LENGTH];

    cmd_val.ptr = cmd_ptr;
    cmd_val.slen = 0;

    if (group) {
	char cmd_str[MAX_CMD_ID_LENGTH];
	pj_ansi_sprintf(cmd_str, "%d", group->id);
	pj_strcat2(&cmd_val, cmd_str);	
    }
    pj_strcat(&cmd_val, cmd_name);
    pj_strdup(cli->pool, &add_cmd, &cmd_val);
    
    pj_hash_set(cli->pool, cli->cmd_name_hash, cmd_val.ptr, 
		(unsigned)cmd_val.slen, 0, cmd);
}
コード例 #6
0
/*
 * The public API to invoke DNS SRV resolution.
 */
PJ_DEF(pj_status_t) pj_dns_srv_resolve( const pj_str_t *domain_name,
				        const pj_str_t *res_name,
					unsigned def_port,
					pj_pool_t *pool,
					pj_dns_resolver *resolver,
					unsigned option,
					void *token,
					pj_dns_srv_resolver_cb *cb,
					pj_dns_srv_async_query **p_query)
{
    pj_size_t len;
    pj_str_t target_name;
    pj_dns_srv_async_query *query_job;
    pj_status_t status;

    PJ_ASSERT_RETURN(domain_name && domain_name->slen &&
		     res_name && res_name->slen &&
		     pool && resolver && cb, PJ_EINVAL);

    /* Build full name */
    len = domain_name->slen + res_name->slen + 2;
    target_name.ptr = (char*) pj_pool_alloc(pool, len);
    pj_strcpy(&target_name, res_name);
    if (res_name->ptr[res_name->slen-1] != '.')
	pj_strcat2(&target_name, ".");
    len = target_name.slen;
    pj_strcat(&target_name, domain_name);
    target_name.ptr[target_name.slen] = '\0';


    /* Build the query_job state */
    query_job = PJ_POOL_ZALLOC_T(pool, pj_dns_srv_async_query);
    query_job->common.type = PJ_DNS_TYPE_SRV;
    query_job->objname = target_name.ptr;
    query_job->resolver = resolver;
    query_job->token = token;
    query_job->cb = cb;
    query_job->option = option;
    query_job->full_name = target_name;
    query_job->domain_part.ptr = target_name.ptr + len;
    query_job->domain_part.slen = target_name.slen - len;
    query_job->def_port = (pj_uint16_t)def_port;

    /* Start the asynchronous query_job */

    query_job->dns_state = PJ_DNS_TYPE_SRV;

    PJ_LOG(5, (query_job->objname, 
	       "Starting async DNS %s query_job: target=%.*s:%d",
	       pj_dns_get_type_name(query_job->dns_state),
	       (int)target_name.slen, target_name.ptr,
	       def_port));

    status = pj_dns_resolver_start_query(resolver, &target_name, 
				         query_job->dns_state, 0, 
					 &dns_callback,
    					 query_job, &query_job->q_srv);
    if (status==PJ_SUCCESS && p_query)
	*p_query = query_job;

    return status;
}
コード例 #7
0
PJ_END_DECL


/* Get Symbian phone model info, returning length of model info */
unsigned pj_symbianos_get_model_info(char *buf, unsigned buf_size)
{
    pj_str_t model_name;

    /* Get machine UID */
    TInt hal_val;
    HAL::Get(HAL::EMachineUid, hal_val);
    pj_ansi_snprintf(buf, buf_size, "0x%08X", hal_val);
    pj_strset2(&model_name, buf);

    /* Get model name */
    const pj_str_t st_copyright = {"(C)", 3};
    const pj_str_t st_nokia = {"Nokia", 5};
    char tmp_buf[64];
    pj_str_t tmp_str;

    _LIT(KModelFilename,"Z:\\resource\\versions\\model.txt");
    RFile file;
    RFs fs;
    TInt err;
    
    fs.Connect(1);
    err = file.Open(fs, KModelFilename, EFileRead);
    if (err == KErrNone) {
	TFileText text;
	text.Set(file);
	TBuf16<64> ModelName16;
	err = text.Read(ModelName16);
	if (err == KErrNone) {
	    TPtr8 ptr8((TUint8*)tmp_buf, sizeof(tmp_buf));
	    ptr8.Copy(ModelName16);
	    pj_strset(&tmp_str, tmp_buf, ptr8.Length());
	    pj_strtrim(&tmp_str);
	}
	file.Close();
    }
    fs.Close();
    if (err != KErrNone)
	goto on_return;
    
    /* The retrieved model name is usually in long format, e.g: 
     * "© Nokia N95 (01.01)", "(C) Nokia E52". As we need only
     * the short version, let's clean it up.
     */
    
    /* Remove preceding non-ASCII chars, e.g: "©" */
    char *p = tmp_str.ptr;
    while (!pj_isascii(*p)) { p++; }
    pj_strset(&tmp_str, p, tmp_str.slen - (p - tmp_str.ptr));
    
    /* Remove "(C)" */
    p = pj_stristr(&tmp_str, &st_copyright);
    if (p) {
	p += st_copyright.slen;
	pj_strset(&tmp_str, p, tmp_str.slen - (p - tmp_str.ptr));
    }

    /* Remove "Nokia" */
    p = pj_stristr(&tmp_str, &st_nokia);
    if (p) {
	p += st_nokia.slen;
	pj_strset(&tmp_str, p, tmp_str.slen - (p - tmp_str.ptr));
    }
    
    /* Remove language version, e.g: "(01.01)" */
    p = pj_strchr(&tmp_str, '(');
    if (p) {
	tmp_str.slen = p - tmp_str.ptr;
    }
    
    pj_strtrim(&tmp_str);
    
    if (tmp_str.slen == 0)
	goto on_return;
    
    if ((unsigned)tmp_str.slen > buf_size - model_name.slen - 3)
	tmp_str.slen = buf_size - model_name.slen - 3;
    
    pj_strcat2(&model_name, "(");
    pj_strcat(&model_name, &tmp_str);
    pj_strcat2(&model_name, ")");
    
    /* Zero terminate */
    buf[model_name.slen] = '\0';
    
on_return:
    return model_name.slen;
}