Asterisk核心框架

Asterisk核心框架
Asterisk核心框架

Asterisk内核框架

Asterisk是一个开源的pbx系统,在公开的资料中,很难找到asterisk 内核系统的详细描述。因此,很有必要写一篇内核框架的描述文档,作为内部培训文档,相互学习提高。

本文主要从三个层面来描述asterisk内核,即asterisk内核模块、内核启动过程、基本呼叫流程。

一、asterisk内核模块

Asterisk由内部核心和外围动态可加载模块组成。内部核心由以下六个部分组成:PBX交换核心模块(PBX Switching Core)、调度和I/O管理模块(Scheduler and I/O Manager)、应用调用模块(Application Launcher)、编解码转换模块(Codec Translator)、动态模块加载器模块(Dynamic Module Loader)和CDR生成模块(CDR Core)。

外围动态可加载模块包括以App_开始的Applications、以Func_开始的Functions、以Res_开始的Resources、以Chan_开始的channels、以Codec_开始的codec编解码模块等。

1.内核模块

1) PBX交换核心模块(PBX Switching Core):

l pbx.c

pbx.c是asterisk的核心模块,每路呼叫都需要经过它调度。pbx实现了builtin applications,也就是内置的应用,比如最常见的Answer,Hangup, Background,Wait等等。

struct ast_app是一个关键数据结构,它定义了注册builtin applications的结构。

load_pbx函数用来注册builtin applications和一些命令行CLI命令(每个模块都有些CLI命令)。该函数在系统启动时被调用。

pbx_exec是

Answer/BackGround/Busy/Goto/GotoIf/Hangup/Set等builtin applications的执行入口函数,它被pbx_extension_helper调用。ast_pbx_start函数是每路呼叫的起点。

2) 调度和I/O管理模块(Scheduler and I/O Manager):

l Channel.c:

Channel.c/channel.h定义了channel操作的结构体和接口函数。struct ast_channel_tech结构体是所有channel都要用到的关键结构体,它定义channel操作的一系列回调函数指针,如call、 hangup、answer等。每个channel模块都会定义ast_channel_tech的实体,

并将各自的回调函数赋值给它。例如 chan_sip.c中定义如下:

/*! \brief Definition of this channel for PBX channel registration */

static const struct ast_channel_tech sip_tech = {

.type = "SIP",

.description = "Session Initiation Protocol (SIP)",

.capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1), .properties = AST_CHAN_TP_WANTSJITTER |

AST_CHAN_TP_CREATESJITTER,

.requester = sip_request_call,

.devicestate = sip_devicestate,

.call = sip_call,

.hangup = sip_hangup,

.answer = sip_answer,

.read = sip_read,

.write = sip_write,

.write_video = sip_write,

.indicate = sip_indicate,

.transfer = sip_transfer,

.fixup = sip_fixup,

.send_digit_begin = sip_senddigit_begin,

.send_digit_end = sip_senddigit_end,

.bridge = ast_rtp_bridge,

.send_text = sip_sendtext,

.func_channel_read = acf_channel_read,

};

ast_call、ast_hangup、ast_answer等函数分别实现

ast_channel_tech中的call、hangup、answer等回调函数的调用。

struct ast_channel结构体定义了channel的上下文参数,它是每个参与呼叫的channel必不可少的,都会调用ast_channel_alloc来申请ast_channel。

l io.c

io.c实现了asterisk跟外部交互时的I/O管理,如chan_sip为了从外部接收SIP信令,调用ast_io_add添加IO接口,并调用ast_io_wait实现外部消息接收。

3)应用调用模块(Application Launcher):

在pbx.c中定义了一系列的应用调用接口。

applications模块定义了application回调函数并注册后,在pbx.c中通过应用调用接口回调执行。

应用调用接口的关键函数是pbx_extension_helper,它执行dialplan,在cli上打印“Executing ……”,并抛出ami event事件,同时调用pbx_exec执行application回调函数。

4) 编解码转换模块(Codec Translator):

Translate.c:

struct ast_translator:编码转换描述结构体,它定义了编码转换的名称、回调函数、运行时选项。

struct ast_trans_pvt:编码转换上下文描述结构体。

ast_register_translator:编码转换注册接口函数,供各编码模块调用,注册struct ast_translator类型的结构体变量。

ast_unregister_translator:编码转换注销函数

ast_translate:编码转换的执行函数。

codec_gsm.c/codec_...:对应各种编码的编解码执行模块,如

g.711alaw/g.711ulaw/gsm等。

5)动态模块加载器模块(Dynamic Module Loader):

该模块主要是Module.h。

Module.h中定义了struct ast_module_info结构,用来保存各模块的注册、注销回调函数,以及模块描述信息。

load_module、unload_module,每个应用模块的注册、注销函数,由各个模块自行定义为static函数。

AST_MODULE_INFO_STANDARD:注册接口、注销接口、模块描

述信息等模块信息的登记接口。它是一个宏定义,动态模块调用它时,首先定义类型为ast_module_info的__mod_info静态结构变量,保存模块信息,并定义__attribute__ ((constructor))

__reg_module和__attribute__ ((destructor))

__unreg_module,在程序启动和退出时调用。

6)CDR生成模块(CDR Core):

Cdr.c:

ast_cdr_register:cdr driver注册,供cdr_mysql等调用,注册话单保存的回调函数。

ast_cdr_engine_init:CDR模块初始化,注册cdr status、加载cdr.conf、启动CDR线程。

ast_cdr_detach:产生话单的接口函数,呼叫结束时被调用。

2.外围可加载模块:

1)Applications

以app_开始的模块,如app_dial.c、app_db.c、app_queue.c、app_record.c、app_meetme.c 等,代码保存在apps目录中。每个application模块都定义了load_module函数和unload_module函数,分别用来注册和注销application。

load_module函数调用ast_register_application函数,注册application命令,例如app_dial模块注册Dial:res =

ast_register_application(app, dial_exec, synopsis, descrip)。unload_module函数调用ast_unregister_application函数,注销application命令。

每个application模块都会使用AST_MODULE_INFO_STANDARD宏来登记模块信息__mod_info。 AST_MODULE_INFO_STANDARD 将load_module和unload_module注册为回调函数,供module load/unload/reload调用。

2)Channel

以chan_开始的模块,如chan_sip.c、chan_h323.c、

chan_mgcp.c 、chan_iax2.c、 chan_zap.c等,对应代码保存在channels目录中。

channel注册、注销过程和application基本类似。由于每个channel需要和外部交互,都会在load_module中启用do_monitor线程来侦听外部tcp/udp端口,接收外部消息。

每个channel也定义了各自的cli命令和Function命令,例如chan_sip 定义了sip debug/history/no/notify/prune/ reload/set/show等cli

命令和SIP_HEADER、CHECKSIPDOMAIN、SIPPEER、SIPCHANINFO等 Function命令。

3)Functions

以Fun_开始的模块,例如Fun_db.c、func_moh.c、func_cdr.c等,对应代码保存在funcs目录中。

Function注册、注销过程也和application类似。

每个Function模块也定义了各自的Function命令,例如Fun_db.c就定义了DB、DB_EXISTS、DB_DELETE等Function命令。

二、asterisk启动过程

主要就main函数讲解asterisk的启动过程:

1int main(int argc, char *argv[])

2

3 {

4

5int c;

6

7char filename[80] = "";

8

9char hostname[MAXHOSTNAMELEN] = "";

10

11char tmp[80];

12

13char * xarg = NULL;

14

15int x;

16

17 FILE *f;

18

19 sigset_t sigs;

20

21int num;

22

23int isroot = 1;

24

25char *buf;

26

27char *runuser = NULL, *rungroup = NULL;

28

29/*保存命令行参数(argv[]->_argv[]),以便程序重启时使用*/ 30

31/* Remember original args for restart */

32

33if (argc > sizeof(_argv) / sizeof(_argv[0]) - 1) {

34

35 fprintf(stderr, "Truncating argument size to %d\n", ( (sizeof(_argv) / sizeof(_argv[0])) - 1);

36

37 argc = sizeof(_argv) / sizeof(_argv[0]) - 1;

38

39 }

40

41for (x=0; x

42

43 _argv[x] = argv[x];

44

45 _argv[x] = NULL;

46

47if (geteuid() != 0)

48

49 isroot = 0;

50

51/*命令如果是rasterisk,设置AST_OPT_FLAG_NO_FORK和

AST_OPT_FLAG_REMOTE标志位*/

52

53/* if the progname is rasterisk consider it a remote console */ 54

55if (argv[0] && (strstr(argv[0], "rasterisk")) != NULL) {

56

57 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FORK | A 58

59 }

60

61/*得到当前主机名,在启动时打印出来*/

62

63if (gethostname(hostname, sizeof(hostname)-1))

64

65 ast_copy_string(hostname, "

", sizeof(hostname));

66

67/*获取当前的进程标识*/

68

69 ast_mainpid = getpid();

70

71/*建立mu-law和a-law转换表*/

72

73 ast_ulaw_init();

74

75 ast_alaw_init();

76

77/*为FFT逆变换(傅立叶逆变换)做一些初始化,用于在zaptel里

进行callerid的DTMF检测*/

78

79 callerid_init();

80

81/*初始化内置命令的_full_cmd字符串,并注册常用命令,

ast_builtins_init() -> ast_cli_register_multiple() -

> ast_cli_register() -> __ast_cli_register() */

82

83 ast_builtins_init();

84

85/*初始化base64转换*/

86

87 ast_utils_init();

88

89/* tty/tdd初始化*/

90

91 tdd_init();

92

93/*设置用户历史命令的保存路径*/

94

95if (getenv("HOME"))

96

97 snprintf(filename, sizeof(filename), "%s/.asterisk_history 98

99/* Check for options */

100

101/*检查命令行的输入参数,匹配参数范围

是“mtThfFdvVqprRgciInx:U:G:C:L:M:”,不同的参数输入走到不同

的case分支处理。有几个v,verbose级别就增加几*/

102

103while ((c = getopt(argc, argv, "mtThfFdvVqprRgciInx:U:G:C:L 104

105switch (c) {

106

107#if HAVE_WORKING_FORK

108

109case 'F':

110

111 ast_set_flag(&ast_options, AST_OPT_FLAG_ALWAYS 112

113break;

114

115case 'f':

116

117 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FOR 118

119break;

120

121#endif

122

123case 'd':

124

125 option_debug++;

126

127 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FOR 128

129break;

130

131case 'c':

132

133 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FOR 134

135break;

136

137case 'n':

138

139 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_COL 140

141break;

142

143case 'r':

144

145 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FOR 146

147break;

148

149case 'R':

150

151 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FOR 152

153break;

154

155case 'p':

156

157 ast_set_flag(&ast_options, AST_OPT_FLAG_HIGH_P 158

159break;

160

161case 'v':

162

163 option_verbose++;

164

165 ast_set_flag(&ast_options, AST_OPT_FLAG_NO_FOR

166

167break;

168

169case 'm':

170

171 ast_set_flag(&ast_options, AST_OPT_FLAG_MUTE); 172

173break;

174

175case 'M':

176

177if ((sscanf(optarg, "%d", &option_maxcalls) != 1) || 178

179 option_maxcalls = 0;

180

181break;

182

183case 'L':

184

185if ((sscanf(optarg, "%lf", &option_maxload) != 1) || 186

187 option_maxload = 0.0;

188

189break;

190

191case 'q':

192

193 ast_set_flag(&ast_options, AST_OPT_FLAG_QUIET); 194

195break;

196

197case 't':

198

199 ast_set_flag(&ast_options, AST_OPT_FLAG_CACHE_ 200

201break;

202

203case 'T':

204

205 ast_set_flag(&ast_options, AST_OPT_FLAG_TIMEST 206

207break;

208

209case 'x':

210

211 ast_set_flag(&ast_options, AST_OPT_FLAG_EXEC); 212

213 xarg = ast_strdupa(optarg);

214

215break;

216

217case 'C':

218

219 ast_copy_string(ast_config_AST_CONFIG_FILE, opt 220

221 ast_set_flag(&ast_options, AST_OPT_FLAG_OVERRI 222

223break;

224

225case 'I':

226

227 ast_set_flag(&ast_options, AST_OPT_FLAG_INTERN 228

229break;

230

231case 'i':

232

233 ast_set_flag(&ast_options, AST_OPT_FLAG_INIT_KE 234

235break;

236

237case 'g':

238

239 ast_set_flag(&ast_options, AST_OPT_FLAG_DUMP_C 240

241break;

242

243case 'h':

244

245 show_cli_help();

246

247 exit(0);

248

249case 'V':

250

251 show_version();

252

253 exit(0);

254

255case 'U':

256

257 runuser = ast_strdupa(optarg);

258

259break;

260

261case 'G':

262

263 rungroup = ast_strdupa(optarg);

264

265break;

266

267case '?':

268

269 exit(1);

270

271 }

272

273 }

274

275/*如果用了-c或者-v或者-r并且没有-x cmd参数,则打印欢迎信

息*/

276

277if (ast_opt_console || option_verbose || (ast_opt_remote && 278

279 ast_register_verbose(console_verboser);

280

281 WELCOME_MESSAGE;

282

283 }

284

285/*如果没有开调试则简单打印Booting */

286

287if (ast_opt_console && !option_verbose)

288

289 ast_verbose("[ Booting\n");

290

291/*显示控制台时,不论是本地还是远程,都不能使用-F参数,否

则无效*/

292

293if (ast_opt_always_fork && (ast_opt_remote || ast_opt_conso 294

295 ast_log(LOG_WARNING, "'alwaysfork' is not compatible w 296

297 ast_clear_flag(&ast_options, AST_OPT_FLAG_ALWAYS_F 298

299 }

300

301/* For remote connections, change the name of the remote co 302

303 * We do this for the benefit of init scripts (which need to kno 304

305 * the main asterisk process has died yet). */

306

307if (ast_opt_remote) {

308

309 strcpy(argv[0], "rasterisk");

310

311for (x = 1; x < argc; x++) {

312

313 argv[x] = argv[0] + 10;

314

315 }

316

317 }

318

319/*读取主配置文件,主配置文件是由make menuselect配置的

*/

320

321if (ast_opt_console && !option_verbose)

322

323 ast_verbose("

[ Reading Master Configuration ]\n");

324

325 ast_readconfig();

326

327/*如果启动加了-g,取消core dump文件的大小限制*/

328

329if (ast_opt_dump_core) {

330

331struct rlimit l;

332

333 memset(&l, 0, sizeof(l));

334

335 l.rlim_cur = RLIM_INFINITY;

336

337 l.rlim_max = RLIM_INFINITY;

338

339if (setrlimit(RLIMIT_CORE, &l)) {

340

341 ast_log(LOG_WARNING, "Unable to disable core size 342

343 }

344

345 }

346

347/*修改用户和组权限*/

348

349if ((!rungroup) && !ast_strlen_zero(ast_config_AST_RUN_GRO

351 rungroup = ast_config_AST_RUN_GROUP;

352

353if ((!runuser) && !ast_strlen_zero(ast_config_AST_RUN_USER 354

355 runuser = ast_config_AST_RUN_USER;

356

357 #ifndef __CYGWIN__

358

359if (isroot)

360

361 ast_set_priority(ast_opt_high_priority);

362

363if (isroot && rungroup) {

364

365struct group *gr;

366

367 gr = getgrnam(rungroup);

368

369if (!gr) {

370

371 ast_log(LOG_WARNING, "No such group '%s'!\n", ru 372

373 exit(1);

374

375 }

376

377if (setgid(gr->gr_gid)) {

378

379 ast_log(LOG_WARNING, "Unable to setgid to %d (% >gr_gid, rungroup);

380

381 exit(1);

382

383 }

384

385if (setgroups(0, NULL)) {

386

387 ast_log(LOG_WARNING, "Unable to drop unneeded 388

389 exit(1);

390

391 }

392

393if (option_verbose)

394

395 ast_verbose("Running as group '%s'\n", rungroup);

397 }

398

399if (runuser && !ast_test_flag(&ast_options, AST_OPT_FLAG_R 400

401 #ifdef HAVE_CAP

402

403int has_cap = 1;

404

405#endif /* HAVE_CAP */

406

407struct passwd *pw;

408

409 pw = getpwnam(runuser);

410

411if (!pw) {

412

413 ast_log(LOG_WARNING, "No such user '%s'!\n", run 414

415 exit(1);

416

417 }

418

419 #ifdef HAVE_CAP

420

421if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0)) {

422

423 ast_log(LOG_WARNING, "Unable to keep capabilitie 424

425 has_cap = 0;

426

427 }

428

429#endif /* HAVE_CAP */

430

431if (!isroot && pw->pw_uid != geteuid()) {

432

433 ast_log(LOG_ERROR, "Asterisk started as nonroot, b 434

435 exit(1);

436

437 }

438

439if (!rungroup) {

440

441if (setgid(pw->pw_gid)) {

442

443 ast_log(LOG_WARNING, "Unable to setgid to % >pw_gid);

444

445 exit(1);

446

447 }

448

449if (isroot && initgroups(pw-

>pw_name, pw->pw_gid)) {

450

451 ast_log(LOG_WARNING, "Unable to init groups 452

453 exit(1);

454

455 }

456

457 }

458

459if (setuid(pw->pw_uid)) {

460

461 ast_log(LOG_WARNING, "Unable to setuid to %d (% >pw_uid, runuser);

462

463 exit(1);

464

465 }

466

467if (option_verbose)

468

469 ast_verbose("Running as user '%s'\n", runuser);

470

471 #ifdef HAVE_CAP

472

473if (has_cap) {

474

475 cap_t cap;

476

477 cap = cap_from_text("cap_net_admin=ep");

478

479if (cap_set_proc(cap))

480

481 ast_log(LOG_WARNING, "Unable to install capa 482

483if (cap_free(cap))

484

485 ast_log(LOG_WARNING, "Unable to drop capab 486

487 }

488

489#endif /* HAVE_CAP */

490

491 }

492

493#endif /* __CYGWIN__ */

494

495 #ifdef linux

496

497if (geteuid() && ast_opt_dump_core) {

498

499if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) < 0) {

500

501 ast_log(LOG_WARNING, "Unable to set the process root user. %s\n", strerror(errno));

502

503 }

504

505 }

506

507#endif

508

509/*初始化模拟终端ast_term_init(),默认是VT100*/

510

511 ast_term_init();

512

513 printf(term_end());

514

515 fflush(stdout);

516

517if (ast_opt_console && !option_verbose)

518

519 ast_verbose("

[ Initializing Custom Configuration Options ]\n");

520

521/* custom config setup */

522

523/*注册命令core show config mappings*/

524

525 register_config_cli();

526

527/*配置文件的映射和绑定*/

528

529 read_config_maps();

530

531if (ast_opt_console) {

533if (el_hist == NULL || el == NULL)

534

535 ast_el_initialize();

536

537if (!ast_strlen_zero(filename))

538

539 ast_el_read_history(filename);

540

541 }

542

543/*设置和检查本地或远程终端的连接*/

544

545if (ast_tryconnect()) {

546

547/* One is already running */

548

549if (ast_opt_remote) {

550

551if (ast_opt_exec) {

552

553 ast_remotecontrol(xarg);

554

555 quit_handler(0, 0, 0, 0);

556

557 exit(0);

558

559 }

560

561 printf(term_quit());

562

563 ast_remotecontrol(NULL);

564

565 quit_handler(0, 0, 0, 0);

566

567 exit(0);

568

569 } else {

570

571 ast_log(LOG_ERROR, "Asterisk already running on % r' to connect.\n", ast_config_AST_SOCKET);

572

573 printf(term_quit());

574

575 exit(1);

576

577 }

579 } else if (ast_opt_remote || ast_opt_exec) {

580

581 ast_log(LOG_ERROR, "Unable to connect to remote aster 582

583 printf(term_quit());

584

585 exit(1);

586

587 }

588

589/* Blindly write pid file since we couldn't connect */

590

591 unlink(ast_config_AST_PID);

592

593 f = fopen(ast_config_AST_PID, "w");

594

595if (f) {

596

597 fprintf(f, "%ld\n", (long)getpid());

598

599 fclose(f);

600

601 } else

602

603 ast_log(LOG_WARNING, "Unable to open pid file '%s': % 604

605#if HAVE_WORKING_FORK

606

607if (ast_opt_always_fork || !ast_opt_no_fork) {

608

609 #ifndef HAVE_SBIN_LAUNCHD

610

611 daemon(1, 0);

612

613 ast_mainpid = getpid();

614

615/* Blindly re-

write pid file since we are forking */

616

617 unlink(ast_config_AST_PID);

618

619 f = fopen(ast_config_AST_PID, "w");

620

621if (f) {

622

623 fprintf(f, "%ld\n", (long)ast_mainpid);

625 fclose(f);

626

627 } else

628

629 ast_log(LOG_WARNING, "Unable to open pid file '% 630

631#else

632

633 ast_log(LOG_WARNING, "Mac OS X detected. Use '/sbin d' to launch with the nofork option.\n");

634

635#endif

636

637 }

638

639#endif

640

641/* Test recursive mutex locking. */

642

643/*测试线程安全,避免出现死锁*/

644

645if (test_for_thread_safety())

646

647 ast_verbose("Warning! Asterisk is not thread safe.\n"); 648

649/*创建用于和控制台交互的服务器端socket接口*/

650

651 ast_makesocket();

652

653/*加入信号集,设置掩码,以及注册信号的相应handler */

654

655 sigemptyset(&sigs);

656

657 sigaddset(&sigs, SIGHUP);

658

659 sigaddset(&sigs, SIGTERM);

660

661 sigaddset(&sigs, SIGINT);

662

663 sigaddset(&sigs, SIGPIPE);

664

665 sigaddset(&sigs, SIGWINCH);

666

667 pthread_sigmask(SIG_BLOCK, &sigs, NULL);

668

669 signal(SIGURG, urg_handler);

671 signal(SIGINT, __quit_handler);

672

673 signal(SIGTERM, __quit_handler);

674

675 signal(SIGHUP, hup_handler);

676

677 signal(SIGCHLD, child_handler);

678

679 signal(SIGPIPE, SIG_IGN);

680

681/* ensure that the random number generators are seeded wit 682

683 Asterisk is started

684

685 */

686

687/*设置种子并初始化随机数发生器*/

688

689 srand((unsigned int) getpid() + (unsigned int) time(NULL)); 690

691 initstate((unsigned int) getpid() * 65536 + (unsigned

692

693/*初始化日志模块*/

694

695if (init_logger()) {

696

697 printf(term_quit());

698

699 exit(1);

700

701 }

702

703 #ifdef HAVE_ZAPTEL

704

705 {

706

707int fd;

708

709int x = 160;

710

711 fd = open("/dev/zap/timer", O_RDWR);

712

713if (fd >= 0) {

714

715if (ioctl(fd, ZT_TIMERCONFIG, &x)) {

716

拨号方案(Dialplan)入门笔记

拨号方案(Dialplan)入门笔记 刚学习这玩意,很详细的说明,就不写了,慢慢的去研究吧,不明白的可以去看下“电话未来之路”(我看了N次,才大概弄明白点意思),所以,也算是吧自己的理解写到上面吧。作为笔记。。 ............................................................................................................ .................................................................................... 一:拨号方案的语法 1:拨号方案的文件在extensions.conf 中定义,一般都存在于目录/etc/asterisk 下面。 2:拨号方案由4部分组成:contexts、extensions、priorities、applications. Context : 个人理解就是对拨号进行分组,方便调用,就想面向对象里的类一样,划分为一个类一个类,由[] 括起来 例:[text] ....... 这就是一个contexts Priority: Extension 执行的步骤,都以1 开始,看下面的Extension 说明就明白了,所以先说 Priorty Extension :Asterisk重要执行的指令,就是对电话执行那些处理,或理解为一个电话操作的流程。 语法:exten => 完整的extension 由三部分组成: 例:exten => name,priority,application() .........application 表示应用里面的动作。先这么理解吧 就像这样:[text] exten => 8002,1,Answer() exten => 8002,2,Hangup() ;......这个例子意思是当拨打分机8002 的时候先执行接听,随即是挂断电话,当然要先在sip.conf 下的分机8002 参数设置context=text Application: 意思是电话流程中的应用或动作,就像上面例子中的 "Answer()和Hangup()",

在华硕RT-N11+上玩转OpenWRT+Asterisk

在华硕RT-N11+上玩转OpenWRT+Asterisk 华硕RT-N11+是一款高性能的300M 802.11n无线路由器,内置Ralink RT3052F 384M 主频的CPU,32M SDRAM,4M FLASH,高主频的CPU为希望开发具有定制功能应用的爱好者提供了很好的平台,下面介绍如何将OpenWRT和Asterisk移植到此路由上作为一个小型的SIP Server。 图表 1 被肢解的ASUS RT‐N11+ 图表 2 ASUS RT‐N11+ CPU特写

4M 的flash实在不给力,更换为8M 的 Spansion flash 型号S25GL064N,这样基本可以满足asterisk的运行。 一、编译openwrt,编译环境为fedora13。 1.svn checkout svn://https://www.360docs.net/doc/4414648251.html,/openwrt/trunk 2.cd trunk 3../scripts/feeds update -a 4../scripts/feeds install -a 5.make menuconfig 选中Target System->Ralink RT288x/RT305x 选中Subtarget-> RT305x based boards

选中Network->Telephony->asterisk18 LuCI->Servcer Interfaces->luci-sgi-uhttpd

6.make V=99 编译完成可以在trunk看到以下文件 bin/ramips/openwrt-ramips-rt305x-fonera20n-squashfs-sysupgrade.bin 偷个懒借用了fonera20n的映像,程序可以跑,LEDD和按键未验证,有兴趣可以参考target/linux/ramips/files/arch/mips/ralink/rt305x/mach-fonera20n.c建立针对RT-N11+的映像。 二、烧录程序 1. 用编程器烧录bootloader“uboot_SDK_nor_sdr32M32bit_v3508_20110919.bin” 2. 连接串口,pin1-pin4依次为VCC,GND,CPU_TX,CPU_RX,波特率57600 3. 烧录openwrt映像 1)在PC机上搭建tftp服务器推荐用Tftpd32.exe, 2)将文件“openwrt-ramips-rt305x-fonera20n-squashfs-sysupgrade.bin”放到 tftp工具的目录下, 3)启动设备在boot menu中选择2按提示输入IP地址和映像名称,升级。

Asterisk安装指南

Asterisk安装指南 2010-03-20 10:49 1、选择操作系统 据说Asterisk对大多Linux支持的都比较好,内核版本2.6.9-55.EL安装起来很顺利,2.4的麻烦一些。注意安装系统的时候选择上开发环境的包。2、在/usr/src目录中下载Asterisk相关安装包并解压 #cd /usr/src https://www.360docs.net/doc/4414648251.html,/pub/libpri/releases/libpri-1.4.10.tar.gz https://www.360docs.net/doc/4414648251.html,/pub/zaptel/releases/zaptel-1.4.12.1.tar.gz(dahdi asterisk1.6以后就不用这个,用https://www.360docs.net/doc/4414648251.html,/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.6.1+2.6.1.tar.gz) https://www.360docs.net/doc/4414648251.html,/pub/asterisk/releases/asterisk-1.6.2.tar.gz https://www.360docs.net/doc/4414648251.html,/pub/asterisk/releases/asterisk-addons-1.6.2.0.tar.gz https://www.360docs.net/doc/4414648251.html,/pub/asterisk/releases/asterisk-sounds-1.2.1.tar.gz # tar -xvzf *.tar.gz 3.安装libpri # cd libpri-1.4.9 # make # make install 4.安装zaptel # cd .. # cd zaptel-1.4.12.1 # make # make install # make config 5.安装asterisk # cd .. # cd asterisk-1.4.24.1 # ./configure # make # make install

Asterisk常用调试命令

Asterisk基本配置 Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括: 1模拟接接口,如你的电话线或模拟电话. 2数字线路,如T-1和E-1线路 3Voip协议,如SIP和IAX 目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件 1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件 5.iax.conf:配置呼入和呼出IAX通道的文件 ******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和 chan_sip.so Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括: 1模拟接接口,如你的电话线或模拟电话. 2数字线路,如T-1和E-1线路 3Voip协议,如SIP和IAX 目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件 1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件 5.iax.conf:配置呼入和呼出IAX通道的文件 ******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和 chan_sip.so******

《Asterisk 使用资料》

Asterisk目录及配置文件 /etc/asterisk/Asterisk主目录,包含其它关于Asterisk的配置文件;*zaptel.conf这个配置文件放在/etc,因为其它软件也可以使用Zaptel这个硬件及其驱动,所以不是放在 /etc/asterisk里. /usr/lib/asterisk/modules/这个目录包含所有可以加载Asterisk模块(应用程序\编辑器\格式和有用通道),在Asterisk启运时会加载这些模块(可以编辑modules.conf). /var/lib/asterisk/比较重要的是astdb文件与agi-bin目录;astdb包含Asterisk当地数据库信息. sounds/所有声音提示的文件在里面,包括Asterisk原代码中的sounds.txt文件 mohmp3/如果配置了音乐保持,应用程序会在这个目录下查找mp3(用CBR从文件中去除身份标签). keys/使用公钥和私钥系统认证与一个由RSA数字签名形成的一对等连接.公钥和私钥的扩展名分别为.pub和.key firmware/这个目录含了很多Asterisk相兼容的设备固件,它只有iax/这个子目录,其中有Digium的IAXy的二进制固件镜像. images/只有在较多的支持并且利用图解式的图像设备被发布,这个目录将会与相应的目录有更大的关联. /var/lib/asterisk/agi-bin agi-bin包含所有脚本,可以通过许多已经建立的AGI应用程序与Asterisk连接. /var/spool/asterisk outgoing/ gcall/ tmp/ voicemail/ ================配置文件================ /etc/asterisk/asterisk.conf主要配置文件, /etc/zaptel.conf硬件接口的基本层.修改这个配置文件要用modprobe装载Linux Kernel使用模块. /etc/asterisk/zapata.conf为硬件配置Asterisk的接口. /etc/asterisk/extensions.conf拨号方案. /etc/asterisk/sip.conf SIP协议配置文件 /etc/asterisk/iax.conf呼入和呼出IAX通道 /etc/asterisk/extensions.conf拨号方案配置文件

asterCRM安装配置手册

asterCC安装配置手册 一.安装环境 1.安装程序:astercc-0.14-beta-rc1.zip 2.操作系统:CentOS Linux or Redhat Linux with mysql 3.硬件要求:X86 CPU 1GHz 1GB RAM 20GB HardDisk Ethernet Adaptor 二.安流流程 1.安装CentOS Linux or Redhat Linux 2.下载安装程序: https://www.360docs.net/doc/4414648251.html,/news/astercc-and-astercc-box-released-014-beta-rc1 3.ssh登录后台,解压程序包 [root@sc38 ~]# unzip astercc-0.14-beta-rc1.zip 4.进入astercc-0.14-beta-rc1,更改可执行权限并执行install.sh脚本,根据提示进行安装 [root@sc38 astercc-0.14-beta-rc1]# chmod 755 install.sh [root@sc38 astercc-0.14-beta-rc1]# ./install.sh Please enter database information database host(default localhost): 设置数据库地址,默认为localhost database port(default 3306): 设置数据库连接端口,默认为:3306 database name(default astercc): 设置数据库名,默认为astercc database user name(default root): 设置数据库连接用户,默认为root database user password(default null):eLaStIx.2oo7 设置数据库连接密码,如果本机已安装Elastix,则密码为eLaStIx.2oo7 database bin path(default /usr/bin): 设置mysql的程序路径,默认指定/usr/bin Please enter the Asterisk infomation:

Object-C 经典入门教程

Object-C 入门教程 分类:Sip&asterisk2009-05-04 16:34 16409人阅读评论(2) 收藏举报大纲 o开始吧下载这篇教学 o设定环境 o前言 o编译 hello world o创建 Classes@interface o@implementation o把它们凑在一起 o详细说明...多重参数 o建构子(Constructors) o访问权限 o Class level access o异常情况(Exceptions)处理 o继承、多型(Inheritance, Polymorphism)以及其他面向对象功 能id 型别 o继承(Inheritance) o动态识别(Dynamic types) o Categories o Posing o Protocols o内存管理Retain and Release(保留与释放) o Dealloc o Autorelease Pool o Foundation Framework ClassesNSArray o NSDictionary ?优点与缺点 ?更多信息 开始吧 下载这篇教学 ?所有这篇初学者指南的原始码都可以由objc.tar.gz下 载。这篇教学中的许多范例都是由 Steve Kochan 在 Programming in Objective-C. 一书中撰写。如果你想得到更 多详细信息及范例,请直接参考该书。这个网站上登载的所有 范例皆经过他的允许,所以请勿复制转载。 设定环境 ?Linux/FreeBSD: 安装GNUStep为了编译 GNUstep

应用程序,必须先执行位于 /usr/GNUstep/System/Makefiles/GNUstep.sh 的 GNUstep.sh 这个档案。这个路径取决于你的系统环境, 有些是在 /usr, some /usr/lib,有些是/usr/local。 如果你的 shell 是以 csh/tcsh 为基础的 shell,则应 该改用 GNUStep.csh。建议把这个指令放在 .bashrc 或 .cshrc 中。 ?Mac OS X: 安装XCode ?Windows NT 5.X: 安装cygwin或mingw,然后安装 GNUStep 前言 ?这篇教学假设你已经有一些基本的 C 语言知识,包括 C 数 据型别、什么是函式、什么是回传值、关于指针的知识以及基 本的 C 语言内存管理。如果您没有这些背景知识,我非常建议 你读一读 K&R 的书:The C Programming Language(译注:台 湾出版书名为 C 程序语言第二版)这是 C 语言的设计者所写 的书。 ?Objective-C,是 C 的衍生语言,继承了所有 C 语言的特 性。是有一些例外,但是它们不是继承于 C 的语言特性本身。 ?nil:在 C/C++ 你或许曾使用过 NULL,而在 Objective-C 中则是 nil。不同之处是你可以传递讯息给 nil(例如 [nil message];),这是完全合法的,然而你却不能对 NULL 如法炮 制。 ?BOOL:C 没有正式的布尔型别,而在 Objective-C 中也不 是「真的」有。它是包含在 Foundation classes(基本类别库) 中(即 import NSObject.h;nil 也是包括在这个头文件内)。 BOOL 在 Objective-C 中有两种型态:YES 或 NO,而不是 TRUE 或 FALSE。 ?#import vs #include:就如同你在 hello world 范例中看 到的,我们使用了#import。#import 由 gcc 编译程序支援。 我并不建议使用 #include,#import基本上跟 .h 档头尾的 #ifndef #define #endif 相同。许多程序员们都同意,使用这 些东西这是十分愚蠢的。无论如何,使用 #import 就对了。这 样不但可以避免麻烦,而且万一有一天 gcc 把它拿掉了,将会 有足够的 Objective-C 程序员可以坚持保留它或是将它放回 来。偷偷告诉你,Apple 在它们官方的程序代码中也使用了 #import。所以万一有一天这种事真的发生,不难预料 Apple 将 会提供一个支持 #import 的 gcc 分支版本。 ?在 Objective-C 中, method 及 message 这两个字是可以 互换的。不过messages 拥有特别的特性,一个 message 可以 动态的转送给另一个对象。在Objective-C 中,呼叫对象上的 一个讯息并不一定表示对象真的会实作这个讯息,而是对象知 道如何以某种方式去实作它,或是转送给知道如何实作的对象。

Elastix安装配置手册

Elastix安装配置手册 一.安装环境 1.安装光盘:elastix-1.6-cn.iso 2.操作系统:Linux CentOS 3.硬件要求:X86 CPU 1GHz 1GB RAM 20GB HardDisk Ethernet Adaptor 二.安流流程 首先将Elastix 光盘插入到您的电脑光驱中,开启电脑(您可能需要通过BIOS设置使电脑通过CD启动),安装程序将自动分区和格式化你的硬盘和安装所有的需要的安装包,安装过程非常简单,在典型的机器上大概花费时间不会超过20分钟。 1.下载ISO映象文件: https://www.360docs.net/doc/4414648251.html,/index.php/en/menudownloads.html 2.安装时,显示屏幕上会出现如下提示画面; 3.按回车后,如下图所示,此处是选择键盘类型,这里选择”us”;

4.anaconda安装将开始安装(如果您电脑无足够内存,安装程序将在text 模式下安装); 5.接下来会出现如下提示,此处是用来选择时区,中国国内选择Asia/Shanghai(亚洲/上海);

6.接着出现下图,此处是设定root的密码(注意:两次输入需要一致),安装完登录时需要此密码; 7.接下来的过程一直到安装完成都是自动的,不需要输入任何信息,以下是安装过程; a.检索安装信息;

b.检查附属包; c.从安装光盘复制文件到硬盘;

d.开始安装包进程; e.正在安装包;

f.当所有的需求包都自动安装完毕,光驱将自动打开,将出现如下屏幕 g.把CD从光驱取出,关闭光驱,系统自动重启;

Asterisk的SIP type和身份认证

Asterisk的SIP type和身份认证 在Asterisk中对某个peer的类型分为3种:peer, user和friend 看看voip-info对这三种类型的解释 ?peer: A SIP entity to which Asterisk sends calls (a SIP provider for example). If you want a user (extension) to have multiple phones, define an extension that calls two SIP peers. The peer authenticates at registration. ?user: A SIP entity which places calls through Asterisk (A phone which can place calls only). Users authenticate to reach services with their context. ?friend: An entity which is both a user and a peer. This make sense for most desk handsets and other devices. Asterisk will create two objects, one peer and one user, with the same name. where it can be found (IP address/host name) and that it is reachable from now on. 简单的说,在这篇文档里, type=peer定义对方是一个服务提供者, 它允许你的Asterisk通过这里定义的服务商打电话; 而user则定义对方是你的一个客户端, 允许对方通过你的Asterisk打电话. friend就是两者兼有. 但是实际情况是什么? 试试这样的定义: [1001] username=1001 secret=xxxxx host=dynamic port=5060 type=peer context=from-extensions 然后用一个SIP客户端来尝试注册到你的Asterisk上, what happened? 你会发现客户端也能注册上! 其实type的真正意义在于Asterisk怎么去处理发往外部和来自外部的请求. type=peer 如果type是peer,有两层含义. 1. 可以将对方作为一个SIP Service Provider, 允许你的Asterisk通过对方进行呼出. 2. 如果对方在逻辑上是一个客户端, asterisk将根据传入的Invite请求来对对方进行身份验证, 但需要注意的是这里的验证不是通过username和secret, 而是通过对方的address和port. 这里分两种情况: * 对方的address和port没有匹配到你在sip.conf中对任何一个peer的设置, 如果你的Asterisk 允许匿名呼入(allowguest=yes), 那么, 该呼入将被传到在sip.conf的general配置中的context 上. 如果不允许匿名呼入, 直接拒绝该呼入. * 对方的address和port匹配到了任何一个sip.conf种的peer设置, 那么改呼入将被传到该peer 指定的context上.

最新服务器基础知识(初学者必看)

服务器基础知识【初学者必看】 1. 什么是服务器 就像他的名字一样,服务器在网络上为不同用户提供不同内容的信息、资料和文件。可以说服务器就是Internet网络上的资源仓库,正是因为有着种类繁多数量庞大内容丰富的服务器的存在,才使得Internet如此的绚丽多彩。 2. 服务器的种类和功能 (1) WWW服务器(WWW Server) WWW服务器也称为Web服务器(Web Server)或HTTP服务器(HTTP Server),它是Internet上最常见也是使用最频繁的服务器之一,WWW服务器能够为用户提供网页浏览、论坛访问等等服务。比如:我们在使用浏览器访问https://www.360docs.net/doc/4414648251.html,的时候,实际上就是在访问Discuz!的WWW服务器,从该WWW服务器获取需要的论坛资料和网页。 (2) FTP服务器(FTP Server) FTP服务器是专门为用户提供各种文件(File)的服务器,FTP服务器上往往存储大量的文件,例如:软件、MP3、电影、程序等等。用户只要使用FTP客户端软件登录到FTP服务器上就可以从FTP服务器下载所需文件和资源到自己的电脑上,同时,

你也可以把自己电话上的文件上传到FTP上供其他用户下载,以实现文件资源的共享。 (3) 邮件服务器(Mail Server) e-mail是Internet上应用最频繁的服务之一,而Internet上每天数亿百亿计的电子邮件的收发都是通过邮件服务器实现的。邮件服务器就像邮局一样,可以为用户提供电子邮件的接收存储和发送服务。 除了以上介绍的3种主要服务器之外,还有很多其他类型的网络服务器,例如:数据库服务器(DatabaseServer)、代理服务器(Proxy Server)、域名服务器(Domain Name Server)等等…… 3. 服务器的操作系统 目前服务器中使用的操作系统主要有两类:Windows和Unix。 (1) Windows Windows是美国微软公司(Microsoft)开发的操作系统,在服务器领域,主要有Windows2000Server/Advanced Server/Data Center与Windows2003 Standard Edition/EnterpriseEdition操作系统,Windows的优点是操作简 单,由于Windows使用图形界面进行操作,因而对各种服务器软件功能配置简

asterisk+freepbx+astercrm的安装----lamp rpm安装

Linux下安装呼叫中心服务器(ASTERISK+FreePBX) 一、环境要求: 操作系统:centos 5.0以上(以最小化形式安装) Linux内核版本:2.6.22 Asterisk版本:asterisk V.1.6.2.18 FreePBX版本:FreePBX:2.9.0 以rpm方式安装好的LAMP环境 以root身份登录 二、所需软件包 https://www.360docs.net/doc/4414648251.html,/pub/telephony/asterisk/asterisk-1.6.2.1 8.tar.gz https://www.360docs.net/doc/4414648251.html,/freepbx-2.9.0.tar.gz 三、安装步骤 1、Lamp的安装 下载所有软件包到/usr/local/src路径 配置yum源,安装相关软件 yum –y update yum install –y httpd http-devel mysql mysql-devel mysql-server php php-devel php-mysql yum install php5 php5-cli php5-mysql php-pear libapache2-mod-php5 php5-curl php5-gd php-db yum install php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml

yum install e2fsprogs-devel keyutils-libs-devel krb5-devel libogg libselinux-devel libsepol-devel libxml2-devel libtiff-devel gmp php-pear php-pear-DB php-gd php-mysql php-pdo kernel-devel ncurses-devel audiofile-devel libogg-devel openssl-devel mysql-devel zlib-devel perl-DateManip sendmail-cf sox yum install gcc gcc-c++ wget bison mysql-devel mysql-server php php-mysql php-pear php-pear-DB php-mbstring nano tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel php-gd audiofile-devel gtk2-devel subversion kernel-devel yum install festival festival-dev yum install ncurses-base ncurses-bin ncurses-term libncurses5 libncursesw5 libncurses5-dev libncursesw5-dev yum install zlib1g zlib1g-dev yum install bison bison-doc yum install install libxml2 libxml2-dev yum install libtiff4 libtiff4-dev yum install libasound2 libgsm1 libltdl3 libpq4 libspeex1 libsqlite0 libtonezone1 libaudiofile0 libaudiofile-dev yum install libnet-telnet-perl mime-construct libipc-signal-perl libmime-types-perl libproc-waitstat-perl mkdir /var/lib/mysql chown –R mysql:mysql /var/lib/mysql /etc/init.d/httpd start chkconfig –level 35 httpd on mysql_install_db chown –R mysql.mysql /var/lib/mysql

Asterisk安装和测试

Asterisk安装 (红色字体部分为需要键入或修改的部分)

下载准备 系统环境:Linux CentOS 5.0,安装开发工具以及开发库。 Asterisk 源代码包asterisk-1.6.1.20.tar.gz,版本:1.6.1.20。 SIP软电话使用eyebeam 版本:1.5.8。 1.切换用户(需要输入管理员密码),执行 su root 2.进入源码包存放文件夹 [root@asterisk-test1 ~]#cd /usr/local/src 3.下载 [root@asterisk-test1 ~]#wget https://www.360docs.net/doc/4414648251.html,/pub/telephony/asterisk/releases/asterisk1.6.1.20. tar.gz 编译安装Asterisk 1.解压源代码包 [root@asterisk-test1 ~]# tar -zxvf asterisk-1.6.1.20.tar.gz 2.进入包目录 [root@asterisk-test1 ~]# cd asterisk-1.6.1.20 3.环境检测和预配置 [root@asterisk-test1 asterisk-1.4.5]# ./configure(其实这样直接进行configure并非十分规范。应当先使用“./configure –help”命令来 查看一些可用的选项和参数,然后根据实际情况才进行定制操作。)当环境预检测和预配置工作 做完时,最后会显示以上反馈信息。并且建立好Makefile。 注意:系统如果缺少安装必须的包,此步骤可能会出现configure: error错误,解决方案见后文可能遇到的问题 configure: creating ./config.status config.status: creating build_tools/menuselect-deps config.status: creating makeopts config.status: creating channels/h323/Makefile config.status: creating include/asterisk/autoconfig.h .$$$$$$$$$$$$$$$=..

asterisk配置小结

asterisk配置简单解说 软件版本 asterisk 1.2.7.1 gix101e sip 130 中文 一:通话设置部分 1:软件安装 debian系统下面可以使用如下命令安装,如果是其他发行版可以自己编译安装或者使用相应的包安装。 vax:/home/ailantian# apt-get install asterisk 2:帐户设置 sip的帐户设置 vax:/home/ailantian# cd /etc/asterisk/ vax:/etc/asterisk# ls adsi.conf codecs.conf logger.conf res_odbc.conf adtranvofr.conf dnsmgr.conf manager.conf rpt.conf agents.conf dundi.conf meetme.conf rtp.conf alarmreceiver.conf enum.conf mgcp.conf sip.conf alsa.conf extconfig.conf misdn.conf sip_notify.conf asterisk.adsi extensions.ael modem.conf skinny.conf asterisk.conf extensions.conf modules.conf telcordia-1.adsi cdr.conf features.conf musiconhold.conf voicemail.conf cdr_custom.conf festival.conf osp.conf vpb.conf cdr_manager.conf h323.conf oss.conf zapata.conf cdr_odbc.conf iax.conf phone.conf cdr_pgsql.conf iaxprov.conf privacy.conf cdr_tds.conf indications.conf queues.conf 这个目录下面的sip.conf bindaddr=192.168.100.144;这个填自己的ip地址。 allow=all;允许所有的解码类型。 添加下面的字段。下面的是帐户信息。 [777] type=friend username=777 secret=777 host=dynamic ; This device registers with us [888] type=friend username=888 secret= host=dynamic ; This device registers with us [333] type=friend username=333 secret= host=dynamic 然后还需要修改的文件是extensions.conf 然后才能够互通,否则可能会收到404,或者407错误。

Tekla常用设置(简)解读

1、当一张Xsteel的图纸转化为CAD的图纸时,被文字或尺寸标注遮挡处的线条时常会断开,问:怎样才能让两条线不断开? 要在绘制图纸中或转化到DXF / DWG 中显示连续线(例如穿过文本或图 纸标记画直线),可将以下变量设置为off: ? XS_USE_LINECLIP_IN_EXPORT (对于DXF / DWG 输出)。 ? XS_USE_LINECLIP (对于绘制的图纸)。 2.修改多边形形状时,系统默认的多边形的第一条边是无法调整的;要通过增加顶点移动来调整多边形的形状。 3、不要使用剪切来减短部件。由于在导出信息到 NC 文件时剪切并不总能影响部件长度,这会导致工厂错误。采用移动部件控柄或使用细部 > 接合来代替。 不要使用接合来延长部件。这会导致与连接和细部相关的错误。采用移动部件控柄来代替。 4、如何在报表中将连续的文字独立的列: A、在报表中的文本域中添加文本<,>; B、同时在输出文件时将报表的名称的后缀改为<*.csv>格式. C、打开时采用EXCEL打开即可. 5、定义轴线标签边框 要定义轴线标签边框大小,请使用工具>高级选项>图纸属性中的XS_DRAWING_GRID_LABEL_FRAME_FIXED_WIDTH变量。默认值为零,表明轴线标签边框的宽基于轴线标签的宽。要增加或减少边框的宽,请以毫米为单位输入需要的值。 XS_DRAWING_GRID_LABEL_FRAME_FIXED_WIDTH 6、滚轮鼠标 要设置滚动(不按住)滚轮时的缩放比例,使用变量 XS_ZOOM_STEP_RATIO_IN_MOUSEWHEEL_MODE。 要设置滚动并按住滚轮时的缩放比例,使用变量 XS_ZOOM_STEP_RATION_IN_SCROLL_MODE。 7、如何修改13.0系统默认的字体样式和标注样式 xs13.0的字体样式系统默认是Comic Sans MS 标注样式是Bookman Old Style 我太喜欢这些字体,我想把他们全部修改为宋体,虽然出图后也可以把他们修改为自己想要的那种字体,但感觉不是很方便,请问可以在系统下修改吗?我想一出图不经修改就可以是我想要的那种字体: 1.在这里也可以改,后面的为输出CAD转换的字体,*1.0的为修改字宽. // Examples: (remove the comment marks // to make the lines effective) // Arial Narrow = ARIALN.TTF * 1.0 // ISOCPEUR = ISOCP.SHX * 1.0 // ISOCTEUR = ISOCT.SHX * 1.0 2.在BAT文件中可以修改模型轴线的字体 rem *** Fonts --------------------------------------------------- set XS_DEFAULT_FONT=Arial Black set XS_DEFAULT_FONT_SIZE=10 set XS_TEXT_FONT=Arial Narrow rem set XS_VIEW_TITLE_FONT=Arial Narrow 8、将图形文件从XSTEEL转到CAD中的时候,图面上的字体有的时候会有位

asterisk常用命令

asterisk常用命令 Asterisk基本配置 Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括: 1模拟接接口,如你的电话线或模拟电话. 2数字线路,如T-1和E-1线路 3V oip协议,如SIP和IAX 目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件 1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件 5.iax.conf:配置呼入和呼出IAX通道的文件 ******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和chan_sip.so Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括: 1模拟接接口,如你的电话线或模拟电话. 2数字线路,如T-1和E-1线路 3V oip协议,如SIP和IAX 目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件 1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件 5.iax.conf:配置呼入和呼出IAX通道的文件 ******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和chan_sip.so******

asterisk目录及配置说明

asterisk 目录及配置说明 Asterisk 目录及配置文件 /etc/asterisk Asterisk 主目录,包含其它关于Asterisk 的配置文件; *zaptel.conf 这个配置文件放在/etc, 因为其它软件也可以使用Zaptel 这个硬件及其驱动, 所以不是放在/etc/asterisk 里. /usr/lib/asterisk/modules 这个目录包含所有可以加载Asterisk 模块(应用程序编辑器格式和有用通道), 在Asterisk 启运时会加载这些模块(可以编辑modules.conf). /var/lib/asterisk 比较重要的是astdb 文件与agi-bin 目录; astdb 包含Asterisk 当地数据库信息. sounds/ 所有声音提示的文件在里面,包括Asterisk 原代码中的sounds.txt 文件 mohmp3/ 如果配置了音乐保持,应用程序会在这个目录下查找mp3(用CBR从文件中去除身份标签). keys/ 使用公钥和私钥系统认证与一个由RSA 数字签名形成的一对等连接.公钥和私钥的扩展名分别为.pub 和.key firmware/ 这个目录含了很多Asterisk相兼容的设备固件,它只有iax/这个子目录,其 中有Digium的lAXy的二进制固件镜像. images/ 只有在较多的支持并且利用图解式的图像设备被发布,这个目录将会与相应的目录有更大的关联. /var/lib/asterisk/agi-bin agi-bin 包含所有脚本,可以通过许多已经建立的Asterisk 连接.系统的接口,在这里可以写自己的脚本来控制拨打流程。 ================配置文件================ /etc/asterisk/asterisk.conf 主要配置文件, 修改这个配置文件要用modprobe 装载Linux AGl 应用程序与 /etc/zaptel.conf 硬件接口的基本层

相关文档
最新文档