Eigene asterisk module schreiben: Unterschied zwischen den Versionen

Aus metasec wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „=Grundgerüst= =Configdateien= <pre> struct ast_config *cfg; struct ast_variable *var; * load the configfile: cfg = ast_conf…“)
 
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
 +
=Coding Guidelines=
 +
 +
http://www.asterisk.org/developers/coding-guidelines
 +
 
=Grundgerüst=
 
=Grundgerüst=
  
Zeile 31: Zeile 35:
 
     }
 
     }
 
     ast_config_destroy(cfg);
 
     ast_config_destroy(cfg);
 +
 +
</pre>
 +
 +
=ASTDB=
 +
Einen einzelnen Eintrag schreiben
 +
ast_db_put(uml_db_family, exten, str_val);
 +
 +
Größere Operationen mit der AstDB
 +
<pre>
 +
 +
    char c[10] = "astdb_tab";
 +
    /*
 +
    get the structs for the database
 +
    */
 +
    struct ast_db_entry *db_tree;
 +
    struct ast_db_entry *entry;
 +
 +
        db_tree = ast_db_gettree(c, NULL);
 +
        for ( entry = db_tree; entry; entry = entry->next ) {
 +
 +
            t_key=ast_strdupa(entry->key);
 +
            key = strsep(&t_key, "/");
 +
            key = strsep(&t_key, "/");
 +
            key = strsep(&t_key, "/");
 +
 +
 +
            if (option_verbose > 8)
 +
                ast_log(LOG_NOTICE, "key:%s val:%s \n", key , entry->data);
 +
            sprintf(exten,"%s",key);
 +
 +
            for(j=0;j<100;j++) {
 +
 +
                if ( strstr(user_data[j].ext,exten) && strlen(exten) == strlen(user_data[j].ext)  ) {
 +
                    /* ok. we found the index for the current exten */
 +
                    break;
 +
                } else if ( strlen(user_data[j].ext) == 0 ) {
 +
                    /* ok. we found the next free index */
 +
                    break;
 +
                }
 +
 +
            }
 +
 +
            sprintf(user_data[j].ext,"%s",key);
 +
 +
            if ( strstr(c,"dnd") )
 +
                sprintf(user_data[j].dnd,"%s",entry->data);
 +
            else if ( strstr(c,"uml_target") )
 +
                sprintf(user_data[j].uml,"%s",entry->data);
 +
            else
 +
                sprintf(user_data[j].dyn,"%s",entry->data);
 +
 +
        }
 +
 +
        if (db_tree)
 +
            ast_db_freetree(db_tree);
 +
  
 
</pre>
 
</pre>

Aktuelle Version vom 13. Juni 2010, 17:16 Uhr

Coding Guidelines

http://www.asterisk.org/developers/coding-guidelines

Grundgerüst

Configdateien


    struct ast_config   *cfg;
    struct ast_variable *var;

    /*
     *  load the configfile
     */
    cfg = ast_config_load("metasec.conf");
    if ( !cfg ) {
        ast_log(LOG_WARNING, "no metasec_stat.conf, exiting... \n");
        return RESULT_SUCCESS;
    }

    for ( var = ast_variable_browse(cfg, "general"); var; var = var->next ) {

        if (option_verbose > 8)
            ast_log(LOG_WARNING, "cfg file: %s => %s \n", var->name, var->value);

        if ( strstr(var->name, "dnd_db_family" ) )
            sprintf(dnd_db_family,"%s",var->value);

        else if ( strstr(var->name, "dnd_exec_cmd") && !ast_strlen_zero(var->value) )
            sprintf(dnd_exec_cmd,"%s",var->value);


    }
    ast_config_destroy(cfg);

ASTDB

Einen einzelnen Eintrag schreiben

ast_db_put(uml_db_family, exten, str_val);

Größere Operationen mit der AstDB


    char c[10] = "astdb_tab";
    /*
     get the structs for the database
     */
    struct ast_db_entry *db_tree;
    struct ast_db_entry *entry;

        db_tree = ast_db_gettree(c, NULL);
        for ( entry = db_tree; entry; entry = entry->next ) {

            t_key=ast_strdupa(entry->key);
            key = strsep(&t_key, "/");
            key = strsep(&t_key, "/");
            key = strsep(&t_key, "/");


            if (option_verbose > 8)
                ast_log(LOG_NOTICE, "key:%s val:%s \n", key , entry->data);
            sprintf(exten,"%s",key);

            for(j=0;j<100;j++) {

                if ( strstr(user_data[j].ext,exten) && strlen(exten) == strlen(user_data[j].ext)  ) {
                    /* ok. we found the index for the current exten */
                    break;
                } else if ( strlen(user_data[j].ext) == 0 ) {
                    /* ok. we found the next free index */
                    break;
                }

            }

            sprintf(user_data[j].ext,"%s",key);

            if ( strstr(c,"dnd") )
                sprintf(user_data[j].dnd,"%s",entry->data);
            else if ( strstr(c,"uml_target") )
                sprintf(user_data[j].uml,"%s",entry->data);
            else
                sprintf(user_data[j].dyn,"%s",entry->data);

        }

        if (db_tree)
            ast_db_freetree(db_tree);