linux查看sip注册吗命令_linux sip client命令行 - CSDN
精华内容
参与话题
  • SIP注册过程

    千次阅读 2012-12-31 16:39:22
    SIP注册过程很容易理解。首先我有一个号码,但我的号码可以移动的话,那服务器如何才能找到我呢?SIP注册机制将sip终端的位置报告给注册服务器。这里的注册服务器仅仅是一个逻辑角色。并不一定是独立的物理实体...

    SIP的注册过程很容易理解。首先我有一个号码,但我的号码可以移动的话,那服务器如何才能找到我呢?SIP的注册机制将sip终端的位置报告给注册服务器。这里的注册服务器仅仅是一个逻辑角色。并不一定是独立的物理实体。他可以和代理服务器是同一物理设备。

    SIP终端如何发现代理服务器。也就是说它是怎么知道向那一台注册服务器注册,而且他又是如何知道这一台注册服务器的IP地址的呢?

    这在sip中有详细介绍。关于发现注册服务器。可以使用多播,UA应当使用通用的SIP服务器定位机制。

    在分析注册之前要知道:SIP的URI格式,它是类似于email的地址格式的。在这里一个SIP电话的号码是固定的,他是否是对应多个SIP URI呢?这不是SIP规定的,应该是服务商自行规定的吧。

    一个SIP URI对应了一个域,也即服务提供商的域。UA 应该使用通用的SIP 服务器定位机制,将主机部分的记录地址作为请求的
    Request-URI 和地址。例如,UA 为用户“sip:carol@chicago.com”将REGISTER 请求寻址到
    “sip:chicago.com”。有了服务提供商的域名,当然可以解析到域名的IP。也即找到了注册服务器。这是最通用的注册服务器定位机制

    接下来看一个注册请求:

    REGISTER sip:127.0.0.1 SIP/2.0   //服务器所在的域,因为服务器和客户端在同一台电脑下。将服务器的域名设置为了127.0.0.1。

    Via: SIP/2.0/ ;branch=z9hG4bK-d8754z-1433645714336457-1---d8754z-;rport

    Max-Forwards: 70

    Contact: <sip:bob;rinstance=994e586a994e586a>

    To: <sip:bob@127.0.0.1>  //我理解的是为哪一个用户注册的。是一个完整的SIP用户的SIP URI。因为发出注册请求的并不一定是SIP用户本身。所以要有from头域

    From: <sip:bob@127.0.0.1>;tag=85400e47      //谁发起的注册,就是谁的SIP URI,tag是干嘛使得?//该字符串用于身份鉴别,具体如何使用,还不是很理解。还希望指点

    Call-ID: OWM3MTM4ZjE1NDBjNTJjZTc2OWVjZGIxMjM3NmI4NTE. //我理解的是同一个SIP客户端的call-id是相同的。因为同一个sip客户端会间隔一定的时间就注册一次。在注册服务器里面用户的注册信息保留一定的时间,保存的时间并不是SIP规定的。

    CSeq: 1 REGISTER  //CSeq 值保证REGISTER 请求适当的排序。对于每个使用相同的Call-ID 的REGISTER 请求,UA 必须逐一增加Cseq 值

    Expires: 70   //注册绑定时间为70s。

    Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, UPDATE, INFO, MESSAGE

    Content-Length: 0

     

    以上注册请求中,其中绿色字体的头域为必选的。

    这是客户端的请求注册信息。注册服务器给予处理注册。

    服务器的处理注册请求将在下一节中讲述

    欢迎大家讨论啊。

    QQ:1371176690

    lyyslsw1230@163.com

    87649598 (SIP协议栈resiprocate讨论群)。

    欢迎大家一起讨论啊。
    87649598876495988764959887649598

     

     

     

    展开全文
  • Linux系统并搭建Sip server平台

    千次阅读 2019-06-17 16:39:21
    在虚拟机中安装Linux系统并搭建Sip server平台,并实现windows系统下的Sip Phone客户端,连接Sip服务器,从而能够在多台电脑之间的通话方法 安装虚拟机如VMware, Oracle VM VirtulBox; VMware需要注册, 也可在...

    在虚拟机中安装Linux系统并搭建Sip server平台,并实现windows系统下的Sip Phone客户端,连接Sip服务器,从而能够在多台电脑之间的通话方法

    1.   安装虚拟机如VMware, Oracle VM VirtulBox;
      

    VMware需要注册, 也可在网上另找其他破解方法.
    附上几个注册码:
    ZC5W0-2VX5H-0801Q-7GXEE-PA2XD
    AZ5N0-FKEDK-481GZ-CPNGG-ZY0T6
    YZ7RA-0KD95-M84DY-KGPGX-YP0V8
    Oracle VM VirtulBox可在 ’360软件管家’ 上下载, 个人学习使用时免费.
    2. 安装Linux操作系统,如SUSE, Ubuntu, Red hat;
    SUSE下载地址:http://download.chinaunix.net/download/0013000/12275.shtml
    或:http://www.novell.com/linux/download_linux.html
    或:http://software.opensuse.org/114/en
    Ubuntu下载地址:http://www.ubuntu.com/desktop/get-ubuntu/download
    Red hat下载地址:https://access.redhat.com/downloads/
    或:http://www.linuxdiyf.com/viewarticle.php?id=170465
    小提示:
    Linux安装完成后, 应注意Linux的IP地址, 只有IP地址段在同一个网段上, 如192.168.1.66和192.168.1.99即在同一网段上, 在后面的其他电脑中安装的Sip Phone, 才能登录上.
    查看IP的命令:ifconfig(windows中是ipconfig);
    若不相同且有足够的IP可用, 如在公司中, IP是自动获取的就可按下面的方法设置:
    启动虚拟机, 选中所要的系统, 将网络连接模式改成Bridge模式即可.
    如VMware中,打开VMware Workstation, 选择Edit中的Virtual Network Editor, 选中第一个VMnet0, 将下面的Bridged to中选择虚拟网卡:基于Marvell Yukon 88E8057 PCI-E的通用前兆以太网控制器. 点击OK. 在右侧的Devices中双击Network Adapter, 在打开的窗口中的Network connection中选则Bridged:Connected directly to the physical network. 点击OK. 就设置好了.
    3. 安装java环境,如JDK;
    下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
    也可下JRE,JDK包含JRE.
    小知识:
    JDK(Java Development Kit)是Sun Microsystems针对Java开发人员的产品.自从Java推出以来, JDK已经成为使用最广泛的Java SDK. JDK 是整个Java的核心, 包括了Java运行环境, Java工具和Java基础的类库. JDK是学好Java的第一步.
    SE(J2SE), standard edition, 标准版, 是我们通常用的一个版本, 从JDK 5.0开始, 改名为Java SE.
    EE(J2EE), enterprise edition, 企业版, 使用这种JDK开发J2EE应用程序, 从JDK 5.0开始,改名为Java EE.
    ME(J2ME), micro edition, 主要用于移动设备, 嵌入式设备上的java应用程序, 从JDK 5.0开始, 改名为Java ME.
    4. 安装Tomcat;
    下载地址: http://tomcat.apache.org/download-70.cgi
    安装方法:运行文件夹中bin文件夹下的startup.sh文件, 若运行出错, 先查看该文件的属性, 是否为可执行文件, 在用root用户运行.安装完成后用Linux浏览器打开http://localhost:8080 , 若能打开Apache Tomcat的网页, 就可以了.
    需要用到的命令:
    cd ···/bin/
    ./startup.sh
    ls –l
    chmod +x startup.sh
    su root
    小知识:
    Tomcat 是一个轻量级应用服务器, 在中小型系统和并发访问用户不是很多的场合下被普遍使用, 是开发和调试JSP 程序的首选.
    5. 安装Sip Server;
    下载地址: http://www.brothersoft.com/brekeke-sip-server-for-linux-download-323151.html
    安装方法: 下载下来的文件解压之后,将其中的.war文件拷贝到Tomcat的webapps目录下, 并重命名为oss.war.(用proxy.war时不知为什么不行)
    用浏览器打开http://localhost:8080/oss看到Sip server的页面, 需要一个ID, 可点击在输入框下的链接, 在新打开的页面中找到Get a ID, 点击注册,注意邮箱并须是真实的,注册完成后, 会收到一封邮件, 里面有ID号和下面要用到的账号和密码. 输入ID后, 点击激活, 输入账号sa, 密码sa, 登陆完成.
    6. 配置Sip server;
    点击User Authentication选项卡àNew User选项卡, 建几个用户, 账号密码需要记住, 后面打电话需要用到.
    点击Configuration选项卡àSystem选项卡中的Interface address 1 中填入Linux系统的IP地址, 保存后点击右上角的RESTART/SHUTDOWN, 再点击RESTART, Sip server就设置完成了.
    7. 安装客户端, 如eyebeam, Sip Phone;
    在window系统下安装eyebeam或Sip Phone.
    Eyebeam1.1 (建议使用此版本) 下载地址: http://www.mfdh168.cn/download/bencandy.php?fid-1-id-92-page-1.html#okdown
    http://www.netcq.cc/down/html/?8.html
    Sip Phone下载地址: http://www.duote.com/soft/26763.html
    安装完成后, 打开, 点击系统设置, 输入账号密码上面设置的, 服务器Linux系统的IP, 端口:5060.
    Eyebeam的设置
    Sip Phone的设置

    1.   再在其他电脑上安装客户端, 按上一步的方法设置另一个账户, 完成后就可与前一个通话了.(注意必须有音频输入和输出设备才能拨打电话)
      
    2. 转载:https://blog.51cto.com/2897569/524214
    展开全文
  • linux下开源sip server : opensips 的安装 ,配置 与使用 update 4/12/2012: 新的版本1.8中,会有几根问题: 1 如果你的ubuntu版本是11.10,那么gcc可能是最新的版本,会有curses.h的错误,这个时候去svn下载最新...

    linux下开源sip server : opensips 的安装 ,配置 与使用

    update 4/12/2012:
    新的版本1.8中,会有几根问题:
    1 如果你的ubuntu版本是11.10,那么gcc可能是最新的版本,会有curses.h的错误,这个时候去svn下载最新的版本,在branch的版本,作者做了一个修补版本,这个版本修补了这个错误。
    2 新的版本中opensipsctlrc中已经不和原来的配置文件一样了,关于db_mysql.so的配置必须要 make menuconfig 中启用,然后再make install
    3 如果发现有module db_mysql does not export db_use_table function这个错误,那么确认/usr/local/opensips/modules里面有db_mysql.so,如无的话,要在menuconfig中启用,并且重新install,如果还是有问题,那么检查opensips.cfg,是否load db_mysql.so,如无则添加
    4 如果发现 error 1045 ,这个是因为你的opensipsctlrc中的密码没有设置正确,请比对下文中的opensipsrw的密码,然后重启opensipsdbctl


    这几天一直尝试在Linux下搭建一个Sip服务器,以便防止到了学校没有设备了,之前也在windows下找到了一个不错的Sip服务器:MiniSipServer(MSS),可见这篇文章,但是可惜的是MSS要求本地的所有PHONE都必须发送Authentication也就是授权消息,我还没做这个,所以只能留在以后使用了。因此就找到了这个在linux平台下的OpenSips,开放了源代码,配置自由的工具

    安装:
    1 安装Mysql,如果后面编译的时候提示没有mysql.h 可以参照这片文章  ,找不到curses.h,安装sudo apt-get install libncurses5-dev
    2 下载 opensips
    3 解压后,进入opensips目录
        make all  ,如果出错,一般是缺少一些编译工具,直接apt-get install xxx(相应的工具),或者是      关于mysql的,参照1的文章 。
        make install ,注意权限,这里我做了很多操作,各种chmod
    配置
    1 opensips数据库
       vi /usr/local/etc/opensips/opensipsctlrc  见最后附表
    2 开启数据库
       /usr/local/sbin/opensipsdbctl create 
       如果出现以下错误
        “ERROR: could not load the script in /usr/local/lib/opensips/opensipsctl/opensipsdbctl.mysql for database engine MYSQL
         ERROR: database engine not loaded - tried 'MYSQL'”
         则,
         cd /usr/local/lib/opensips/opensipsctl/
         cp $(你的opensips目录)/scrips/opensipsdbctrl.mysql  ./
         mkdir mysql
         cp  $(你的opensips目录)/scrips/mysql/*.sql ./
         
        成功后,会有两个选项,全选y
    3 察看设置是否正确
       /usr/local/sbin/opensipsctl -c
    使用
    1 开启opensips服务
       /usr/local/sbin/opensipsctl start
       关闭stop 重启restart
        这里我遇到了
         i. ERROR: PID file/var/run/opensips.pid does not exist -- OpenSIPS start failed. 的问题
         一般很多问题都会导致线程启动失败,在这里,vi /var/log/syslog,察看错误究竟出在哪里。
         我的问题是db_url没有定义,所以在opensips.cfg里面,找到了default_db_ctl,去掉注释,果然就可以运行了
         当然也有一些是权限问题。
         ii.可以手动创建mkdir /var/run/opensips/
    2   添加sip用户
         opensipsctl add username password   如:opensipsctl add 100 100
         使用软电话登陆如3cx ,x-lite等,成功登陆
    3   察看注册的sip用户
          opensipsctl ul show
    4 是否在线
        opensipsctl online
    当然,更多的命令还可以使用opensipsctl   ,就会打印出所有的命令帮助


       附表

    ## database type: MYSQL, PGSQL, ORACLE, DB_BERKELEY, or DBTEXT, by default none is loaded
    # If you want to setup a database with opensipsdbctl, you must at least specify
    # this parameter.
     SIP_DOMAIN= YOUR_PC_IP   //这个是你的sip proxy 地址
     DBENGINE=MYSQL
    ## database host
     DBHOST=localhost
    ## database name (for ORACLE this is TNS name)
     DBNAME=opensips
    # database path used by dbtext or db_berkeley
     DB_PATH="/usr/local/etc/opensips/dbtext"
    ## database read/write user
     DBRWUSER=opensips
    ## password for database read/write user
     DBRWPW="opensipsrw"
    ## database read only user
     DBROUSER=opensipsro
    ## password for database read only user
     DBROPW=opensipsro
    ## database super user (for ORACLE this is 'scheme-creator' user)
     DBROOTUSER="root"
    # user name column
     USERCOL="username"

    5 配置opensips的模块
       vi /usr/local/etc/opensips/opensips.cfg
    #
    # $Id: opensips.cfg 8591 2011-11-26 08:27:25Z bogdan_iancu $
    #
    # OpenSIPS basic configuration script
    #     by Anca Vamanu <anca@voice-system.ro>
    #
    # Please refer to the Core CookBook at:
    #      http://www.opensips.org/Resources/DocsCookbooks
    # for a explanation of possible statements, functions and parameters.
    #
    
    
    ####### Global Parameters #########
    
    debug=3
    log_stderror=no
    log_facility=LOG_LOCAL0
    
    fork=yes
    children=4
    
    /* uncomment the following lines to enable debugging */
    #debug=6
    #fork=no
    #log_stderror=yes
    
    /* uncomment the next line to disable TCP (default on) */
    disable_tcp=yes
    
    /* uncomment the next line to enable the auto temporary blacklisting of 
       not available destinations (default disabled) */
    #disable_dns_blacklist=no
    
    /* uncomment the next line to enable IPv6 lookup after IPv4 dns 
       lookup failures (default disabled) */
    #dns_try_ipv6=yes
    
    /* uncomment the next line to disable the auto discovery of local aliases
       based on revers DNS on IPs (default on) */
    #auto_aliases=no
    
    /* uncomment the following lines to enable TLS support  (default off) */
    #disable_tls = no
    #listen = tls:your_IP:5061
    #tls_verify_server = 1
    #tls_verify_client = 1
    #tls_require_client_certificate = 0
    #tls_method = TLSv1
    #tls_certificate = "/usr/local/etc/opensips/tls/user/user-cert.pem"
    #tls_private_key = "/usr/local/etc/opensips/tls/user/user-privkey.pem"
    #tls_ca_list = "/usr/local/etc/opensips/tls/user/user-calist.pem"
    
    /* default db_url to be used by modules requiring DB connection;
       uncomment it if you use any module requiring DB connectivity */
    db_default_url="mysql://opensips:opensipsrw@localhost/opensips"
    
    
    port=5060
    
    /* uncomment and configure the following line if you want opensips to 
       bind on a specific interface/port/proto (default bind on all available) */
    #listen=udp:192.168.1.2:5060
    
    
    ####### Modules Section ########
    
    #set module path
    mpath="/usr/local/lib/opensips/modules/"
    
    /* uncomment next line for MySQL DB support */
    loadmodule "db_mysql.so"
    loadmodule "signaling.so"
    loadmodule "sl.so"
    loadmodule "tm.so"
    loadmodule "rr.so"
    loadmodule "maxfwd.so"
    loadmodule "usrloc.so"
    loadmodule "registrar.so"
    loadmodule "textops.so"
    loadmodule "mi_fifo.so"
    loadmodule "uri.so"
    loadmodule "acc.so"
    /* uncomment next lines for MySQL based authentication support 
       NOTE: a DB (like db_mysql) module must be also loaded */
    loadmodule "auth.so"
    loadmodule "auth_db.so"
    /* uncomment next line for aliases support
       NOTE: a DB (like db_mysql) module must be also loaded */
    loadmodule "alias_db.so"
    /* uncomment next line for multi-domain support
       NOTE: a DB (like db_mysql) module must be also loaded
       NOTE: be sure and enable multi-domain support in all used modules
             (see "multi-module params" section ) */
    #loadmodule "domain.so"
    /* uncomment the next two lines for presence server support
       NOTE: a DB (like db_mysql) module must be also loaded */
    #loadmodule "presence.so"
    #loadmodule "presence_xml.so"
    
    
    # ----------------- setting module-specific parameters ---------------
    
    
    # ----- mi_fifo params -----
    modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
    
    
    # ----- rr params -----
    # do not append from tag to the RR (no need for this script)
    modparam("rr", "append_fromtag", 0)
    
    
    # ----- registrar params -----
    /* uncomment the next line not to allow more than 10 contacts per AOR */
    #modparam("registrar", "max_contacts", 10)
    
    
    # ----- usrloc params -----
    #modparam("usrloc", "db_mode",   0)
    /* uncomment the following lines if you want to enable DB persistency
       for location entries */
    modparam("usrloc", "db_mode",   2)
    modparam("usrloc", "db_url",
    	"mysql://opensips:opensipsrw@localhost/opensips")
    
    
    # ----- uri params -----
    modparam("uri", "use_uri_table", 0)
    
    
    # ----- acc params -----
    /* what sepcial events should be accounted ? */
    modparam("acc", "early_media", 1)
    modparam("acc", "report_cancels", 1)
    /* by default ww do not adjust the direct of the sequential requests.
       if you enable this parameter, be sure the enable "append_fromtag"
       in "rr" module */
    modparam("acc", "detect_direction", 0)
    /* account triggers (flags) */
    modparam("acc", "failed_transaction_flag", 3)
    modparam("acc", "log_flag", 1)
    modparam("acc", "log_missed_flag", 2)
    /* uncomment the following lines to enable DB accounting also */
    modparam("acc", "db_flag", 1)
    modparam("acc", "db_missed_flag", 2)
    
    
    # ----- auth_db params -----
    /* uncomment the following lines if you want to enable the DB based
       authentication */
    modparam("auth_db", "calculate_ha1", yes)
    modparam("auth_db", "password_column", "password")
    #modparam("auth_db", "db_url","mysql://opensips:opensipsrw@localhost/opensips")
    #modparam("auth_db", "load_credentials", "")
    
    
    # ----- alias_db params -----
    /* uncomment the following lines if you want to enable the DB based
       aliases */
    #modparam("alias_db", "db_url",
    #	"mysql://opensips:opensipsrw@localhost/opensips")
    
    
    # ----- domain params -----
    /* uncomment the following lines to enable multi-domain detection
       support */
    #modparam("domain", "db_url",
    #	"mysql://opensips:opensipsrw@localhost/opensips")
    #modparam("domain", "db_mode", 1)   # Use caching
    
    
    # ----- multi-module params -----
    /* uncomment the following line if you want to enable multi-domain support
       in the modules (dafault off) */
    #modparam("auth_db|usrloc|uri", "use_domain", 1)
    
    
    # ----- presence params -----
    /* uncomment the following lines if you want to enable presence */
    #modparam("presence|presence_xml", "db_url",
    #	"mysql://opensips:opensipsrw@localhost/opensips")
    #modparam("presence_xml", "force_active", 1)
    #modparam("presence", "server_address", "sip:192.168.1.2:5060")
    
    
    ####### Routing Logic ########
    
    
    # main request routing logic
    
    route{
    
    	if (!mf_process_maxfwd_header("10")) {
    		sl_send_reply("483","Too Many Hops");
    		exit;
    	}
    
    	if (has_totag()) {
    		# sequential request withing a dialog should
    		# take the path determined by record-routing
    		if (loose_route()) {
    			if (is_method("BYE")) {
    				setflag(1); # do accounting ...
    				setflag(3); # ... even if the transaction fails
    			} else if (is_method("INVITE")) {
    				# even if in most of the cases is useless, do RR for
    				# re-INVITEs alos, as some buggy clients do change route set
    				# during the dialog.
    				record_route();
    			}
    			# route it out to whatever destination was set by loose_route()
    			# in $du (destination URI).
    			route(1);
    		} else {
    			/* uncomment the following lines if you want to enable presence */
    			##if (is_method("SUBSCRIBE") && $rd == "your.server.ip.address") {
    			##	# in-dialog subscribe requests
    			##	route(2);
    			##	exit;
    			##}
    			if ( is_method("ACK") ) {
    				if ( t_check_trans() ) {
    					# non loose-route, but stateful ACK; must be an ACK after 
    					# a 487 or e.g. 404 from upstream server
    					t_relay();
    					exit;
    				} else {
    					# ACK without matching transaction ->
    					# ignore and discard
    					exit;
    				}
    			}
    			sl_send_reply("404","Not here");
    		}
    		exit;
    	}
    
    	#initial requests
    
    	# CANCEL processing
    	if (is_method("CANCEL"))
    	{
    		if (t_check_trans())
    			t_relay();
    		exit;
    	}
    
    	t_check_trans();
    
    	# authenticate if from local subscriber (uncomment to enable auth)
    	# authenticate all initial non-REGISTER request that pretend to be
    	# generated by local subscriber (domain from FROM URI is local)
    	##if (!(method=="REGISTER") && from_uri==myself) /*no multidomain version*/
    	##if (!(method=="REGISTER") && is_from_local())  /*multidomain version*/
    	##{
    	##	if (!proxy_authorize("", "subscriber")) {
    	##		proxy_challenge("", "0");
    	##		exit;
    	##	}
    	##	if (!db_check_from()) {
    	##		sl_send_reply("403","Forbidden auth ID");
    	##		exit;
    	##	}
    	##
    	##	consume_credentials();
    	##	# caller authenticated
    	##}
    
    	# preloaded route checking
    	if (loose_route()) {
    		xlog("L_ERR",
    		"Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");
    		if (!is_method("ACK"))
    			sl_send_reply("403","Preload Route denied");
    		exit;
    	}
    
    	# record routing
    	if (!is_method("REGISTER|MESSAGE"))
    		record_route();
    
    	# account only INVITEs
    	if (is_method("INVITE")) {
    		setflag(1); # do accounting
    	}
    	if (!uri==myself)
    	## replace with following line if multi-domain support is used
    	##if (!is_uri_host_local())
    	{
    		append_hf("P-hint: outbound\r\n"); 
    		# if you have some interdomain connections via TLS
    		##if($rd=="tls_domain1.net") {
    		##	t_relay("tls:domain1.net");
    		##	exit;
    		##} else if($rd=="tls_domain2.net") {
    		##	t_relay("tls:domain2.net");
    		##	exit;
    		##}
    		route(1);
    	}
    
    	# requests for my domain
    
    	## uncomment this if you want to enable presence server 
    	##   and comment the next 'if' block
    	##   NOTE: uncomment also the definition of route[2] from  below
    	##if( is_method("PUBLISH|SUBSCRIBE"))
    	##		route(2);
    
    	if (is_method("PUBLISH"))
    	{
    		sl_send_reply("503", "Service Unavailable");
    		exit;
    	}
    	
    
    	if (is_method("REGISTER"))
    	{
    		# authenticate the REGISTER requests (uncomment to enable auth)
    		#if (!www_authorize("", "subscriber"))
    		#{
    		#	www_challenge("", "0");
    		#	exit;
    		#}
    		##
    		##if (!db_check_to()) 
    		##{
    		##	sl_send_reply("403","Forbidden auth ID");
    		##	exit;
    		##}
    
    		if (!save("location"))
    			sl_reply_error();
    
    		exit;
    	}
    
    	if ($rU==NULL) {
    		# request with no Username in RURI
    		sl_send_reply("484","Address Incomplete");
    		exit;
    	}
    
    	# apply DB based aliases (uncomment to enable)
    	##alias_db_lookup("dbaliases");
    
    	# do lookup with method filtering
    	if (!lookup("location","m")) {
    		switch ($retcode) {
    			case -1:
    			case -3:
    				t_newtran();
    				t_reply("404", "Not Found");
    				exit;
    			case -2:
    				sl_send_reply("405", "Method Not Allowed");
    				exit;
    		}
    	}
    
    	# when routing via usrloc, log the missed calls also
    	setflag(2);
    
    	route(1);
    }
    
    
    route[1] {
    	# for INVITEs enable some additional helper routes
    	if (is_method("INVITE")) {
    		t_on_branch("2");
    		t_on_reply("2");
    		t_on_failure("1");
    	}
    
    	if (!t_relay()) {
    		sl_reply_error();
    	};
    	exit;
    }
    
    
    # Presence route
    /* uncomment the whole following route for enabling presence
       NOTE: do not forget to enable the call of this route from the main
         route */
    ##route[2]
    ##{
    ##	if (!t_newtran())
    ##	{
    ##		sl_reply_error();
    ##		exit;
    ##	};
    ##
    ##	if(is_method("PUBLISH"))
    ##	{
    ##		handle_publish();
    ##	}
    ##	else
    ##	if( is_method("SUBSCRIBE"))
    ##	{
    ##		handle_subscribe();
    ##	}
    ##
    ##	exit;
    ##}
    
    
    branch_route[2] {
    	xlog("new branch at $ru\n");
    }
    
    
    onreply_route[2] {
    	xlog("incoming reply\n");
    }
    
    
    failure_route[1] {
    	if (t_was_cancelled()) {
    		exit;
    	}
    
    	# uncomment the following lines if you want to block client 
    	# redirect based on 3xx replies.
    	##if (t_check_status("3[0-9][0-9]")) {
    	##t_reply("404","Not found");
    	##	exit;
    	##}
    
    	# uncomment the following lines if you want to redirect the failed 
    	# calls to a different new destination
    	##if (t_check_status("486|408")) {
    	##	sethostport("192.168.2.100:5060");
    	##	# do not set the missed call flag again
    	##	t_relay();
    	##}
    }


        
    展开全文
  • Python SIP使用总结(Win&Linux通用)

    万次阅读 2012-03-24 22:07:26
    Python中使用C/C++模块有许多工具,大名鼎鼎的有SWIG(英文意思为:豪饮)、SIP(英文意思为:啜饮,小口的喝),还有boost.python等。其中SIP是从SWIG发展而来,专为Python调用C/C++模块使用的(看SIP的命名就能看...

            Python中使用C/C++模块有许多工具,大名鼎鼎的有SWIG(英文意思为:豪饮)、SIP(英文意思为:啜饮,小口的喝),还有boost.python等。其中SIP是从SWIG发展而来,专为Python调用C/C++模块使用的(看SIP的命名就能看出来,很有意思的)。

            SIP的使用方法,在官网的SIP Reference Guide中有介绍,不过那是针对至少有点经验的人员,对初学者来说,想十分钟快速上手还是有点难度的。这里就介绍下本人在使用SIP总结的需要注意的地方。(本着方便大家方便自己的原则,欢迎转载,无需征得本人同意,但请注明出处,最好是原文连接,图个人气,谢谢!)

            前提,本机上要装了Python、GCC(Windows下可以用MinGW,在我的Eclipse下配置CDT一文中有关于MinGW的安装介绍)。并把python.exe和MinGW下的bin文件路径添加到环境变量中。

    第一部分:安装SIP

            Windows:

            将Riverbank上的sip的zip格式的代码包下载,将其解压到C:\Python27中,那么现在sip的文件夹路径为C:\Python27\sip-4.13.2\sip-4.13.2(你也可以将其解压到任何一个文件夹中,但这里为了叙述方便,就解压到我电脑上的Python的文件夹中)。

            打开Windows的cmd命令行,输如cd C:\Python27\sip-4.13.2\sip-4.13.2跳转到sip文件夹下。  

            输入python configure.py --platform win32-g++。进行配置,显示结果如下:

            再完成上一步后,输入mingw32-make,接着输入mingw32-make install。若无意外,SIP就安装完成了。

            常见问题:

            若是你的电脑上之前安装了Eclipse等其他软件,而将mingw32-make改成了make,那么就要将上面的mingw32-make命令改为make来使用。

            有个朋友说他按上面的方法使用make总是报错,仔细一问,才发现他的电脑上安装了Embacardero的RAD开发工具,也就是熟知的Delphi和C++ Builder的开发工具。在安装了这个工具后,在命令行中输入make,使用的总是Embacardero的C++ Builder的make。根据亲测,即使在配置的时候,使用python configure.py --platform win32-borland命令进行配置,对Emcarbadero的make也是无效的。这个配置命令产生的make文件,只是用于老版本的Borland C++ Builder的make命令。

            若要使用微软的VC的nmake,就要在配置时使用命令python configure.py --platform win32-msvc,其中win32-msvc使用的是VC6的nmake;win32-msvc.net使用的是VC2003的nmake;win32-msvc2005使用的是VC2005的nmake;win32-msvc2008使用的是VC2008的nmake。根据--show-platforms命令显示的结果,SIP的配置暂不支持VC2010和VS11下的nmake。若想知道SIP支持的所有平台和编译器,可以在命令行中使用python configure.py --show -platforms命令来查看。

            Linux:

            Linux下的SIP安装与之类似,甚至更简单,Linux的发行版如Ubuntu,都自动安装了python和gcc,无需配置环境变量。

            所以只要在官网上下载SIP的Linux下的tar.gz格式的代码包,解压到某个目录中。然后在终端中进入该目录,依次输入python configure.py --platform linux-g++;make;make install即可。

    在Python中使用C/C++写的函数。

            1、首先,编写个C文件,功能是将两个数字相加并输出,命名为add.c,这个将成为在Python中的模块名,如下:

    /* File : add.c */
    int add(int x, int y) 
    {  
    	int g;  
    	g = x + y;
    	return g;
    }
    

            2、接着,手工编写SIP文件,在使用SIP的过程中,一个C/C++的源码文件,必须对应一个同名的sip文件,命名为add.sip,如下:

    /* Define the SIP wrapper to the add library. */
    %Module(name=add, language="C")
    int add(int x, int y);     
    

            如果是源程序是用C++写的,那么这里的(name=add, language="C")就可以省去。
            这里的C源码文件没有头文件,所以对应的sip文件很简单。如果C/C++的源码是实现部分,在实现部分还包括接口部分,即头文件。那么在相应的sip文件中需要用

    %TypeHeaderCode
    #include <word.h>
    %End
            来包含相应的头文件。sip文件与正式的C/C++头文件相似,但与之不同的是:sip文件不包含相应的头文件的私有成员变量(private或protected)。更详细的sip文件编写规范,请参考riverbank官方网站上的说明文档SIP Reference Guide。

    3、编译C文件。按照官网的说法,是编写configure.py,但别急,先做一些必不可少的工作。在命令行将add.c编译成add.o文件:输入

    gcc -c add.c

    接着,将这一步生成的add.o文件生产库文件:

    ar -r libadd.a add.o

    这两步在这里是为一个单独的C模块测试的,如果是大量的C模块,可以用一个makefile一并批量完成,这也是初学者容易模糊的地方。记住,需要将libadd.a文件复制到Python文件夹下的libs文件夹中。也可以将源代码直接编译成dll,命令为

            4、手工编写configure.py文件,同样,这个configure文件的编写也不难,看下规范就会了(要会鸟语。。。)。这里,我们模仿官网的模版写一个自己的configure.py。

    import os
    import sipconfig
    
    # The name of the SIP build file generated by SIP and used by the build
    # system.
    build_file = "add.sbf"
    
    # Get the SIP configuration information.
    config = sipconfig.Configuration()
    
    # Run SIP to generate the code.
    os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "add.sip"]))
    
    # Create the Makefile.
    makefile = sipconfig.SIPModuleMakefile(config, build_file)
    
    # Add the library we are wrapping.  The name doesn't include any platform
    # specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
    # ".dll" extension on Windows).
    makefile.extra_libs = ["add"]
    
    # Generate the Makefile itself.
    makefile.generate()

            5、运行configure.py,会生成一个makefile文件(直接用IDLE打开configure.py,按F5运行;或者命令行用python configure.py运行都可以)。
    这里有个诡异的地方,有几个朋友在这一步会报错,说找不到add.sbf文件,而add.sbf文件应该是configure.py运行时调用相关函数自动产生的。若出现这个问题,请重新编译SIP。如果是Windows下,最好是在另一台机器上拷贝一个完整的包含能正常的SIP的Python文件夹,到有问题的机器上,将问题Python文件夹覆盖掉。

            6、在命令行输入make(这里会生成一个关于函数的警告,不用管它,我们是用来测试的。。。其他的应该没什么问题,若有问题请检查前面的步骤),生成add.pyd文件。然后再输入make install(将add.pyd文件装入到Python的Lib文件夹下的sit-packages文件夹中)。

            7、打开Python 的命令行,进行测试:

    >>>import add
    >>>add.add(4, 7)
    11
    >>>
    

    (原谅我这么烂的模块名。。。)

    提示:

    (1)、这些文件可以放到Python的文件夹下新建的文件夹中(所有的操作在这个目录下的命令行窗口中使用)。注意,Python的父文件夹名不能有空格,否则会无法读取库文件。

    (2)、使用MinGW,需要把~\MinGW\bin添加的环境变量中(Linux下则不必),这样才能使用gcc、make和ar等工具。

    若还有什么注意的,我回继续补充。


    展开全文
  • asterisk sip trunk配置步骤

    千次阅读 2014-10-17 11:13:38
    为了便于测试,首先搭建一个opensips,作为...版本opensips-1.8.0-tls,去掉Makefile.conf中的exclude_modules中的db_mysql,执行命令make all;make install(最好是make prefix=/usr/local/opensips-1.8.0-tls/ all;
  • sip的register流程基本实践

    千次阅读 2018-10-13 23:55:51
    这消息的流程很简单,即sip的设备向sip注册服务器认证的消息.关键是环境的搭建. sip的设备,采用osip+exosip sip的认证服务器,采用kamailio 详细说明: osip和exosip,安装官网安装就可以了,用最新的2016年的版本,...
  • SIP里面的To和From字段是用来显示请求的方向,而不是消息的方向,方向是从请求方指向服务方。  上图显示了两个启用了SIP的设备之间的 SIP 消息交互。 这两个设备可以是 SIP 电话、 手持设备、 掌上电脑或...
  • 本节我们介绍SIP客户端和服务端进行通话。 本节我们介绍2个SIP客户端:xlite和linphonec. 如果你在windows下开发...如果你的SIP服务已经部署到生产环境(通常使用linux操作系统),这时我们通常只能使用命令行模式,
  • 先下载源码: 这里我下载的是1.8.2,因为这个是目前的最稳定版本,(虽然已经有1.9及2.0了) ... 编译前需要安装如下软件: apt-get install perl libdbi-perl libdbd-mysql-perl libdbd-pg-per
  • Asterisk常用命令

    千次阅读 2017-07-27 11:23:10
    Asterisk 常用命令 在控制台外执行 1.查看进程 ps() 如:ps a 显示所有进程 ps -a 显示同一终端下的所有程序 ps -A 显示所有进程 ps -A | grep +通道名 查看某一管道的进程 top 查看CPU负载 单核CPU正常...
  • Sip服务器搭建全过程(Linphone拨号)

    万次阅读 2018-04-23 10:44:02
    Sip服务器搭建全过程参考文档:http://blog.csdn.net/jhope/article/details/53129122参考文档:https://www.cnblogs.com/xlwm/p/4414207.html参考文档:http://blog.csdn.net/Richar1/article/details/50949506参考...
  • sofia sip开发一 基础知识

    千次阅读 2014-07-13 15:43:50
    sofia sip开发
  • Kamailio 的 SIP服务器使用经验

    万次阅读 2011-12-26 15:21:25
    代码由开源sip服务器Kamailio (OpenSER)修改而成,使用了mysql数据库保存用户信息,测试平台是FC9。首先需要先安装好mysql,我使用的版本是mysql5.1.38,正确安装完后,将默认字符集改为 Latin1,不然后面生成...
  • Freeswitch连接SIP电话

    千次阅读 2017-11-20 11:03:51
    连接SIP电话本篇主要介绍如何用freeswitch连接SIP电话,freeshswitch最典型的应用是作为一个服务器(背靠背的用户代理),并用电话客户端软件(一般叫软电话)连接到它。 准备工作 测试注意事项 安装编译需要的lib库...
  • GB28181接入服务器是EasyDSS云平台提供的接入GB28181设备/平台的信令交互服务器,GB28181将 SIP定位为联网系统的主要信令基础协议,并利用 SIP协议的有关扩展,实现了对非会话业务的兼顾,例如,对报警业务、历史视...
  • 总结一下内核ALG的学习方法和基本原理,方便以后需要了解这方面的朋友少走弯路。该文档分析基于broadcom5358方案。
  • linux网络编程(第2版)》 第1篇 linux网络开发基础 第1章 linux操作系统概述 2 1.1 linux发展历史 2 1.1.1 linux的诞生和发展 2 1.1.2 linux名称的由来 3 1.2 linux的发展要素 3 1.2.1 unix操作系统 3 ...
  • asterisk常用命令

    千次阅读 2014-10-09 14:36:31
    使用篇  经过前面的步骤,代码已经编译完了,可执行文件安装完毕同时默认的配置文件也安装了,那么我们就从使用上首先...下文所举例子都会以sip为例,其他h323,iax,mgcp等等类似,不再赘述。  使用之前
  • 在VOIP的环境中,特别是基于SIP通信的环境中,我们经常会遇到一些非常常见的问题,例如,单通,30秒就断线,注册问题,回声等。这些问题事实上都有非常直接的排查方式和解决办法,用户可以按照一定的排查方式,工具...
  • 开源SIP服务器OpenSIPS简介

    万次阅读 2014-09-14 15:24:48
    OpenSIPS是一个成熟的开源SIP服务器,除了提供基本的SIP代理及SIP路由功能外,还提供了一些应用级的功能。OpenSIPS的结构非常灵活,其核心路由功能完全通过脚本来实现,可灵活定制各种路由策略,可灵活应用于语音、...
1 2 3 4 5 ... 20
收藏数 1,392
精华内容 556
关键字:

linux查看sip注册吗命令