[commit] r3252 - freeswitch/branches/knhor/wip/mod_conference
Author: knhor Date: Wed Nov 1 19:11:08 2006 New Revision: 3252 Modified: freeswitch/branches/knhor/wip/mod_conference/mod_conference.c Log: finish command parser Modified: freeswitch/branches/knhor/wip/mod_conference/mod_conference.c ============================================================================== --- freeswitch/branches/knhor/wip/mod_conference/mod_conference.c (original) +++ freeswitch/branches/knhor/wip/mod_conference/mod_conference.c Wed Nov 1 19:11:08 2006 @@ -1490,7 +1490,7 @@ return SWITCH_STATUS_SUCCESS; } -static void conference_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, int (*pfncallback)(conference_obj_t*, conference_member_t*, int, switch_stream_handle_t*, void*), void *data) +static void conference_member_itterator(conference_obj_t *conference, switch_stream_handle_t *stream, conf_api_member_cmd_t pfncallback, void *data) { conference_member_t *member = NULL; @@ -1856,7 +1856,7 @@ stream->write_function(stream, "Conference %s (%u members)\n", conference->name, conference->count); conference_list(conference, stream, d); - stream->write_function(stream, "\n"); +// stream->write_function(stream, "\n"); } return 0; @@ -2292,7 +2292,6 @@ } if (buf != NULL && (lbuf = strdup(buf))) { - conference_obj_t *conference = NULL; int argc; char *argv[25]; @@ -2302,62 +2301,72 @@ // find a command to execute if (argc) { int i,found=0; + uint32_t cnum = atoi(argv[0]); + conference_obj_t *conference = (cnum != 0 ? (conference_obj_t *) switch_core_hash_find(globals.conference_hash, argv[0]) : NULL); - for (i=0; i<CONFFUNCAPISIZE && !found; i++) { - if (strcasecmp(argv[i],conf_function_api_commands[i].pname) == 0) { - found = 1; - switch(conf_function_api_commands[i].fntype) { - case 0: // commands that we've broken the command line into arguments for - { conf_api_args_cmd_t pfn = (conf_api_args_cmd_t)conf_function_api_commands[i].pfnapicmd; + if(cnum == 0 || (cnum != 0 && conference != NULL)) { + int argn = (cnum != 0 ? 1 : 0); - if (pfn(conference, stream, argc, &argv[0]) != 0) { - // command returned error, so show syntax usage - stream->write_function(stream,conf_function_api_commands[i].psyntax); - } - } - break; - case 1: // member specific command that can be itteratted - { - uint32_t id = atoi(argv[2]); - int all = ( id == 0 && strcasecmp(argv[2], "all") == 0 ); + for (i=0; i<CONFFUNCAPISIZE && !found; i++) { + if (strcasecmp(argv[argn],conf_function_api_commands[i].pname) == 0) { + found = 1; + switch(conf_function_api_commands[i].fntype) { + case 0: // commands that we've broken the command line into arguments for + { conf_api_args_cmd_t pfn = (conf_api_args_cmd_t)conf_function_api_commands[i].pfnapicmd; - if(all) { - conference_member_itterator(conference, stream, conf_function_api_commands[i].pfnapicmd, argv[3]); - } else { - conf_api_member_cmd_t pfn = (conf_api_member_cmd_t)conf_function_api_commands[i].pfnapicmd; - - if (pfn(conference, NULL, id, stream, argv[3]) != 0) { + if (pfn(conference, stream, argc, &argv[0]) != 0) { // command returned error, so show syntax usage stream->write_function(stream,conf_function_api_commands[i].psyntax); } } + break; + case 1: // member specific command that can be itteratted + { + uint32_t id = atoi(argv[argn+1]); + int all = ( id == 0 && strcasecmp(argv[argn+1], "all") == 0 ); - } - break; - case 2: // commands that deals with all text after command - { conf_api_text_cmd_t pfn = (conf_api_text_cmd_t)conf_function_api_commands[i].pfnapicmd; - char *pstr = lbuf+strlen(conf_function_api_commands[i].pname)+1; + if(all) { + conference_member_itterator(conference, stream, conf_function_api_commands[i].pfnapicmd, argv[argn+2]); + } else { + conf_api_member_cmd_t pfn = (conf_api_member_cmd_t)conf_function_api_commands[i].pfnapicmd; - // advance past all leading white space after command - while(*pstr == ' ' || *pstr == '\t') { - pstr++; + if (pfn(conference, NULL, id, stream, argv[argn+2]) != 0) { + // command returned error, so show syntax usage + stream->write_function(stream,conf_function_api_commands[i].psyntax); + } + } + } + break; + case 2: // commands that deals with all text after command + { conf_api_text_cmd_t pfn = (conf_api_text_cmd_t)conf_function_api_commands[i].pfnapicmd; + char *pstr = lbuf+strlen(conf_function_api_commands[i].pname)+1; - if (pfn(conference, stream, pstr) != 0) { - // command returned error, so show syntax usage - stream->write_function(stream,conf_function_api_commands[i].psyntax); + // advance past all leading white space after command + while(*pstr == ' ' || *pstr == '\t') { + pstr++; } - } - break; + + if (pfn(conference, stream, pstr) != 0) { + // command returned error, so show syntax usage + stream->write_function(stream,conf_function_api_commands[i].psyntax); + } + } + break; + } } } + if(!found) { + stream->write_function(stream, "Confernece command '%s' not found.\nTry 'help conference'\n", argv[argn]); +// stream->write_function(stream,(char *)conf_api_interface.syntax); + } + } else { + stream->write_function(stream,"No Conference called %s found.\n",argv[0]); } - if(!found) { - stream->write_function(stream,(char *)conf_api_interface.syntax); - } } else { - stream->write_function(stream,(char *)conf_api_interface.syntax); + stream->write_function(stream, "Command not specified.\nTry 'help conference'\n"); +// stream->write_function(stream,(char *)conf_api_interface.syntax); } } @@ -3329,7 +3338,7 @@ // build api interface help ".syntax" field string p=strdup("list\n"); for (i=0; i<CONFFUNCAPISIZE; i++) { - nl=strlen(conf_function_api_commands[i].psyntax)+2; + nl=strlen(conf_function_api_commands[i].psyntax)+4; if(p != NULL) ol = strlen(p); p = realloc(p,ol+nl);
participants (1)
-
Freeswitch SVN