Apache的日志文件access_log的标准是每一万个请求增加 1Mb,时间长了硬盘的空间就会越来越少,但是,直接移除该文件的方法是不可取的,因为Apache 将继续写日志文件,结果是将来产生的日志文件的大小没有变化并包含着大量空字符。 正确的方法是转移日志文件并发送信号给Apache 重新打开日志文件 [root@localhost ~]#cd {apache/logs} ————在实际应用中,需要将{apache/logs} 替换为apache的安装目录下的logs目录 [root@localhost logs]# ls -l 总用量 1552 -rw-r–r– 1 root root 1557737 11月 30 17:18 access_log -rw-r–r– 1 root root 7065 11月 30 17:54 error_log -rw-r–r– 1 root root 6 11月 30 17:42 httpd.pid [root@localhost logs]# mv access_log access_log_20071130 [root@localhost logs]# ls -l 总用量 1552 -rw-r–r– [...]
一、 消息 消息是YATE的一个主要组成部分。所有的模块间通信都使用消息而不使用函数调用,这主要是因为我们考虑当一个模块发生变化的时候不影响或不依赖于其他模块,也因为这样让我们的模块调试可以更容易些。一个消息是几个组件的容器: 名字(name)——消息类型的标识,允许消息处理器通过名字进行匹配 返回值(return value)—— 一个用字符串表示的返回值 时间(time)—— 消息被创建的时间;这对于排队的消息检查等待时长非常重要 参数(parameters)—— 有字符串、值对构成的参数。每个处理器都能根据参数进行不同的动作,或者修改参数本身。不知道的参数必须忽略。 所有的消息在YATE内部是二进制形式的。然而我们可以通过rmanager模块提供一个对人友好的形式。 二、 消息传递 YATE内部消息传递通过内存共享(memory sharing)。在这种方式下,可以提高系统的性能。其他可以考虑的形式如管道或Sockets,没有内存共享灵活和高效。当被传递到外部模块(external modules)时,消息被转换成字符串编码的形式,这样所有能处理文本的外部模块都可以处理消息了。 三、 消息处理流程 消息会被消息处理器处理。消息处理器会注册要处理的消息和优先级,当消息被处理时会根据优先级依次调用消息处理器。消息处理器可以修改消息包含的组件(参数,返回值,甚至名称),并且能够决定要不要把消息传递到下一个消息处理器还是终结消息的处理。如果返回true终结消息,false继续下一个模块。 一个消息处理的很好的例子是“call.route”消息: 当一个呼叫到达到某个点时,一个消息像下面这样产生: [Csharp] view plaincopyprint? &Message *m = new Message(“call.route”); m->addParam(“driver”,”iax”); if (e->ies.calling_name) m->addParam(“callername”,e->ies.calling_name); else m->addParam(“callername”,e->session->callerid); if (e->ies.called_number) m->addParam(“called”,e->ies.called_number); else m->addParam(“called”,e->session->dnid); &Message *m = new Message(“call.route”); m->addParam(“driver”,”iax”); if (e->ies.calling_name) m->addParam(“callername”,e->ies.calling_name); else m->addParam(“callername”,e->session->callerid); if (e->ies.called_number) m->addParam(“called”,e->ies.called_number); else m->addParam(“called”,e->session->dnid); 我们把消息发送到引擎,然后检查是否有模块(module)接收并处理了,最后将消息消灭。 [Csharp] view plaincopyprint? [...]
一、 引言 根据研究的进度,我们已经知道在一台YATE服务器上用简单的注册、认证模块:regfile,配置用户信息,同一个域内的用户可以成功注册到一个YATE服务器上,并呼叫成功。但我们没有完成的是如何使两台YATE服务器实现互联,让一台YATE的用户成功呼叫另一台YATE的用户。 案例如下,假设两台YATE服务器YA、YB,YA的IP地址192.168.114.51,YB的IP地址192.168.114.52,两台服务器的域和IP地址相同。YA服务器上开通101用户,YB服务器上开通202用户,现要求101和202能互相呼叫成功。 二、 实现方法 要实现两台YATE服务器互通,服务器则必须实现SIP Proxy功能。查看文档发现在YATE中Proxy功能是通过Route(路由)模块实现的,常见的Route模块是regexroute,另外可以自己编写路由模块。下面我们主要使用regexroute模块实现。 三、 Regexroute Regexroute模块在YATE内部提供了一个简单的方法去路由电信呼叫。这个模块用一个配置文件进行配置。在regexroute中有两个消息被处理: Preroute在Preroute消息处理中,模块把呼叫者进行分类,并归到一个上下文(context)中。 Route在Route消息中模块会根据被叫号码把呼叫映射到一个字符串描述的目标信道(channel)或模块。 a) Preroute阶段 在Preroute阶段,呼叫者会在[contexts]中依次对字符串进行匹配,匹配的结果是“context”,会在后面对应的“context”节进行进一步的处理。如: [contexts] ^$=empty ^00=international ^0=longdistance .*=default 上面每行=左边是欲匹配的正则表达式,右边是匹配的Context结果。具体的正则表达式规则参考“正则表达式”节。 上面的例子是说,所有以00打头的呼叫者用Context为international的进行处理,0打头的用longdistance进行处理,缺省情况用default处理。 然后可以在配置文件后面依次增加Context节,如: [international] [longdistance] [default] b) Route阶段 在Route阶段被叫号码会根据Context节依次对正则表达式进行匹配,匹配成功后执行匹配目标的动作。 匹配目标的第一个字符有特殊的含义: return – 从此Context立刻返回而不再进行路由 include – 呼叫另外一个Context,如果另一个Context没有成功返回就从下一条目返回。 jump – 跳转到另一个Context,但是就不再返回到这个Context了 match – 修改匹配的字符串代替特定的目标 echo – 只是显示置换的行 模块也允许通过name=value的形式设置消息的参数,各参数间用分号(;)分割 c) 例子 ^00/(.*/)$=iax//1@internat.ion.al//0 匹配以00开头的所有字符,如果我们呼叫:0099123456,模块将返回:iax/99123456@internat.ion.al/009912 3456。后面目标中的/0、/1是参数,前面出现的字符为/0,例子中的0099123456,/1为匹配中第一个/( /)之间的参数,/2为匹配中第二个/( /)的参数。/1在例子中是:99123456。 将112和911路由到POTS(普通电话服务)上,也就是E1的任意通道上,并且强制指定特定的编码: [...]
网络电话是下一代网络(NGN)的重要应用之一。“下一代网络”是指10年以后的网络,全部基于软交换(Softswitch)技术。但是,拨打VoIP免费网络电话,并不需要在等待10年。基于现有的TCP/IP网络,我们已经可以使用开源的VoIP软件,实现PC-to-PC的免费语音通话。(注:这里的“免费”,是指不需要支付传统语音通话费用,ADSL/FTTB/3G等上网接入仍然是需要费用的) 下面,我将介绍如何用yate软件搭建VoIP服务器,并用SIP协议完成语音通话。在我的实例中,使用了局域网内的3台PC,Windows操作系统,接在同一个集线器上,并不是广域网或3G接入。 yate2建立VoIP服务器 Yate = Yet Another Telephony Engine,是一款开源的VoIP网络电话软件。它可以作为服务器、也可以作为客户端使用。yate2可以在Linux下运行、也可以在Windows下运行。yate2下载地址: www.lxvoip.net/softphone/yate.html 。 VoIP服务器可以干什么? * 客户端使用各自的用户名和密码登录到服务器上 * 用户通过“电话号码”拨叫另一用户 * 服务器负责转发拨叫请求及此后的其他控制信令 * 服务器可以转发话音数据包 建立服务器这一步不是必须的。yate2支持两个客户端通过IP地址直接连接,而不需要建立服务器。如果你需要支持较多的用户能够互相通话,通常要建立服务器;如果只有2个用户,则可以采用直连方式。 建立VoIP服务器的前提条件 * 一台计算机,作为服务器 * 服务器通常需要拥有固定的公网IP地址 * 服务器上不能再运行客户端(也就是说,客户端、服务器不能同时启动,否则会冲突) 用yate2搭建VoIP服务器的步骤 1. 下载并安装yate2(最好完全安装所有组件,仅30MB) 2. 打开yate2安装目录的conf.d子目录 3. 将regfile.conf.sample复制一份,改名为regfile.conf,打开作下列修改: * 找到;auth=100、;register=100、;route=100三行,分别去掉前面的分号 * 对需要建立的每一个用户,在文件末尾增加两行: [用户名] [...]
http://www.apkbus.com/android-20978-1-1.html
android 来电自动接听和自动挂断 注意:android2.3版本不支持下面的自动接听方法。(会抛异常:java.lang.SecurityException: Neither user xxxxx nor current process has android.permission.MODIFY_PHONE_STATE.) 第一步:准备应用环境需要的系统包和aidl文件。 (1)在应用中创建包:android.telephony 将android系统框架下的\framework\telephony\java\android\telephony目录中的NeighboringCellInfo.aidl文件复制到上面创建的包(android.telephony )中; (2)在应用中创建包:com.android.internal.telephony 将android系统框架下的\framework\telephony\java\com\android\internal\telephony目录中的ITelephony.aidl文件复制到上面创建的包(com.android.internal.telephony )中; 第二步:创建一个获取ITelephony的方法 PhoneUtils.java Java代码 package com.zhouzijing.android.demo; import java.lang.reflect.Method; import com.android.internal.telephony.ITelephony; import android.telephony.TelephonyManager; public class PhoneUtils { /** * 根据传入的TelephonyManager来取得系统的ITelephony实例. * @param telephony * @return 系统的ITelephony实例 * @throws Exception */ public static ITelephony getITelephony(TelephonyManager telephony) throws Exception { Method getITelephonyMethod = telephony.getClass().getDeclaredMethod(“getITelephony”); getITelephonyMethod.setAccessible(true);//私有化函数也能使用 return (ITelephony)getITelephonyMethod.invoke(telephony); } [...]
最近一个项目需要实现挂断电话,实际上1.1版本后.Google已经把该API隐藏掉 今天看资料,发现可以通过AIDL(Android远程方法)及反射,调用hide API,废话不多说了.附上过程 一:在你的项目中新建包com.android.internal.telephony,因为要使用AIDL,该包与ITelephony.aidl一致 在该包下新建文件ITelephony.aidl view source print? 01 package com.android.internal.telephony; 02 /* * Copyright (C) 2007 The Android Open Source Project 03 * * Licensed under the Apache License, Version 2.0 (the “License”); 04 * you may not use this file except in compliance with the License. 05 * You may obtain [...]
使用msysgit可以很方便的从android Git库中下载各个模块的源码具体的步骤如下: 1、安装msysgit 下载地址 http://code.google.com/p/msysgit/downloads/list 2、启动git shell 可以在windows平台下模拟linux 使用msysgit可以很方便的从android Git库中下载各个模块的源码 具体的步骤如下: 1、安装msysgit 下载地址 http://code.google.com/p/msysgit/downloads/list 2、启动git shell 可以在windows平台下模拟linux命令行操作 3、打开android源码git 库地址 http://android.git.kernel.org/ 里面列出了所有android的源码,每个git都是一个独立的模块 4. 下载源码并且在eclipse中使用 在安装好git后, 新建一个文件frameworks,这个文件夹就是用来存放你将要下载的Android SDK源代码的目录 通过git clone https://android.googlesource.com/platform/frameworks/base.git 然后运行git tag,显示分支,因为android有很多版本,如得到 >git tag android-1.0 android-1.5 android-1.5r2 android-1.5r3 android-1.5r4 android-1.6_r1 android-1.6_r1.1 android-1.6_r1.2 android-1.6_r1.3 android-1.6_r1.4 android-1.6_r2 android-sdk-1.5-pre android-sdk-1.5_r1 android-sdk-1.5_r3 android-sdk-1.6-docs_r1 android-sdk-1.6_r1 然后运用 git checkout android-1.5r4 [...]
Eclipse是一个Java开发的良好工具,但是它也支持加入插件的形式对其他语言进行支持。例如加入CDT插件对C语言进行开发,加入PDT插件对PHP语言进行开发等等。闲话就不多说了,现就进入正题。 写在前面的话: 1. 在安装eclipse之前,我们应该先搭建好Java环境。这是因为eclipse是一个运行在Java环境下的软件; 2. 在安装CDT插件前,应该先安装cygwin或者是MinGW。这是因为CDT搭建的是一个基于开源社区Linux系统下的开发环境。这与TC编译器还是有一定不同之处的。TC编译器是一款在windows系统下工作的开发及编译工具。他们的不同之处在于底层函数库的实现方式上有所不同,最为典型的就是图形函数库,有非常本质上的区别。但是他们的编程思路以及代码书写上都是一样的。这对于那些喜欢开源社区,但又不想在Linux系统下编写代码的朋友们来说,是一个很好的消息呀。当然cygwin与mingw两个软件,我建议装cygwin,虽然cygwin占用空间比较大,但是安装后比较齐全,基本上所有Linux系统下的底层包,都会出现。这对Linux开发非常有利。而且是在线安装比较简单。 3. 由于MinGW中没有带gdb调试程序,所以还需要再装一个GDB调试程序,如果大家对自己写的程序很有自信的话,那么GDB调试程序可以不装。 4. eclipse加CDT的安装,在windows下和在Linux系统下有所不同,在这里我只介绍在windows系统下的安装。因为在Linux系统下,现在几个大的社区都已经提供了在线安装的方法,只需要将相应的包下载下来,安装到系统中,对Java环境进行一个设置即可。 Java环境配置: 第一步:下载j2sdk和tomcat:到sun官方站(http://java.sun.com/j2se/1.5.0/download.jsp)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.5.0 Documentation,然后到tomcat官方站点(http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi)下载tomcat(下载最新5.5.9版本的tomcat); 第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可。 1. 安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.5.0): JAVA_HOME=c:\j2sdk1.5.0 classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径) path=%JAVA_HOME%\bin 接着可以写一个简单的java程序来测试J2SDK是否已安装成功: public class Test{ public static void main(String args[]){ System.out.println(“This is a test program.”); } } 将上面的这段程序保存为文件名为 Test.java的文件。 然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令 javac Test.java java Test 此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。 安装eclipse: 首先下载eclipse-SDK-3.4.1-win32.zip(eclipse-SDK-3.4.1-win32.zip下载地址为: http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.4.1-200809111700/eclipse-SDK-3.4.1-win32.zip); 然后将eclipse-SDK-3.4.1-win32.zip直接解压到某一目录下即可。至此,eclipse就安装好了。 对于那些对英文不熟悉的程序员来说,汉化eclipse,或许会成为一个小难点,但是这个不用担心,在这里有一种办法,教你怎么汉化eclipse。在3.3之前的版本,eclipse的汉化工作都是有一个多语言包,或者是汉化工具包来完成的,但是到3.3版本以后,加入了自动升级功能,至此,多语言的汉化,就变得非常容易了。具体的做法就是输入一个更新语言包的地址,更新即可。具体的做法是: 1. 打开eclipse后,点击helpàSoftware Updates…; 2. 打开第二个标签Available Software,在其中点击Add Site…按钮,在其中输入相应的语言包站点即可。 我在这里输入了:http://download.eclipse.org/technology/babel/update-site/europa/站点。当然这个站点中提供的语言包,并不是能够百分之百完成汉化工作,但是对于普通的使用,已经足够了。 3. 接着点击确定按钮,在带有方框的区域内,就可以看到该站点的存在; [...]
Galileo Ganymede Europa 代表不同的版本 2001年11月7日 ,Eclipse 1.0发布 半年之后,2002年6月27日Eclipse进入了2.0时代。2.0时代的Eclipse经历了2.0和2.1两个大的版本。其中2.0在 之后又推出了2.0.1和2.0.2,而之后在2003年3月27日推出的2.1版本,也接连推出了2.1.1,2.1.2和2.1.3三个后续修订版 本。 2004年6月25日 对Eclipse来说是一个值得记住的日子,进入3.0时代的Eclipse采用了OSGi运行时架构。这一年 Eclipse基金会成立,这也标志着Eclipse即将进入一个新的时代。3.0后有两个小的修订版本3.0.1和3.0.2。详细的发布时间信息请参 看Eclipse官网http://archive.eclipse.org/eclipse/downloads/index.php 2005年6月27日 Eclipse 3.1发布,之所以要特别提一下3.1,是因为从这个版本开始一直到还没有发布的3.5版,形成了一个以木星卫星名称相关的系列。1610年,著名的科学 家伽利略通过对木卫1-木卫4的观察,提出了反驳地心说的证据,木卫1-木卫4因此也被称之为伽利略四大卫星(木星还有很多之后发现的其它卫星)。这四大 卫星还被分别赋予了四个神话传说中人物的名字: 木卫1:IO,伊奥 木卫2:Europa,欧罗巴 木卫3:Ganymede,盖尼米德.(值得一提的是早于伽利略2000年前,有记录表明战国时期中国的甘德在公元前346年就已发现了木卫3) 木卫4:Callisto,卡里斯托 取这四个人的名字,一个很重要的原因可能就在于这四个人物都以俊美著称 但是Eclipse从3.1到3.4的命名(codename)并非按照木卫1-4的顺序,而是根据这四颗卫星距离木星从近到远的顺序,因此 Eclipse 3.1就使用了木星已知卫星中第1近的木卫1——IO来命名,Eclipse 3.2就使用木卫4——Callisto距木星(所有木卫中)第4近,Eclipse 3.3采用了木卫2——Europa(第6近),剩下最远的木卫3–Ganaymede就送给了Eclipse 3.4。 下面是目前已知的版本代号 Eclipse 3.1 版本代号 IO 【木卫1,伊奥】 Eclipse 3.2 版本代号 Callisto 【木卫四,卡里斯托 】 Eclipse 3.3 版本代号 Eruopa 【木卫二,欧罗巴 】 Eclipse 3.4 版本代号 Ganymede 【木卫三,盖尼米德 】 Eclipse [...]
近期评论