1. 程式人生 > >pyhotn的p2p-sip網路電話小試牛刀

pyhotn的p2p-sip網路電話小試牛刀

p2p-sip是一個P2P的電話協議,有人寫了python實現。

這個只支援python2,2.6以上

pip安裝,或者下載安裝包解壓。

解壓後有readme,啃一下英文。

編寫webcaller.py

import gevent, sys
from gevent import monkey; monkey.patch_all()
from gevent.pywsgi import WSGIServer
from cgi import parse_qs, escape
import logging
from logging import config
logging.config.fileConfig('logging.conf')
#logger = logging.getLogger(__name__)
logger = logging.getLogger()

from caller import Options
from gevent import queue, Timeout

freeAccounts = queue.Queue()

from app import sipstackcaller

bac, int_ip = None, None
maxwait = 5

import Queue

def application(env, start_response):
  d = parse_qs(env['QUERY_STRING'])
  peers = d.get('peer', ['unknown'])

  response_body = ''
  if env['REMOTE_ADDR'].startswith('14.29.2.') or env['REMOTE_ADDR'] == '127.0.0.1' \
    or env['REMOTE_ADDR'].startswith('192.168.36.') or env['REMOTE_ADDR'].startswith('10.17.41.'):
      gevent.spawn(callpeers, peers)
      status = '200 OK'
  else:
    status = '403 Forbidden'

  response_headers = [
        ('Content-Type', 'text/plain'),
        ('Content-Length', str(len(response_body)))
  ]
  start_response(status, response_headers)

  return [response_body]  

def callpeers(peers):
  user, domain, password = None, None, None
  try:
    for peer in peers:
      peer = escape(peer)
      peer = 'sip:'+peer+'@gd.ctcims.cn'
      logger.info('calling ' + peer)
      (user, domain, password) = freeAccounts.get(timeout=maxwait)
      try:
        options = Options(user, domain, password, bac=bac, int_ip=int_ip, to=peer, uri=peer)
        caller = sipstackcaller.Caller(options)
        gevent.sleep(30)
        logger.info('hangup call to ' + str(caller.options.to))
        try:
          gevent.with_timeout(10, caller.close)
        except Timeout:
          logger.warn('caller.close timeout')
      except Exception as e:
        logger.warn(e)
      finally:
        if user and domain and password:
          logger.info('freeAccounts.put')
          freeAccounts.put((user, domain, password))
  except Queue.Empty:
    logger.warn('get from queue  timeout')
  except Exception as e:
    logger.warn(e)


def hangup(caller, account):
  try:
    caller.close()
  except:
    pass
  finally:
    freeAccounts.put(account)
  logger.info('hangup call to ' + str(caller.options.to))

if __name__ == '__main__':
  try:
    argv = sys.argv
    i, username, password, media, bac = 1, None, None, None, None
    int_ip = '0.0.0.0' 
    jobs, callers = [], []
    while i < len(argv):
      if argv[i] == '-u':
        if username:
          (user, domain) = username.split('@')
          freeAccounts.put((user, domain, password))
          username, password = None, None
        username = argv[i+1]
      elif argv[i] == '-p':
        password = argv[i+1]
      elif argv[i] == '-b':
        bac = argv[i+1]
      elif argv[i] == '-i':
        int_ip = argv[i+1]
      i += 2
    (user, domain) = username.split('@')
    freeAccounts.put((user, domain, password))
  except:
    logger.exception('exception')
    sys.exit(-1)
    
  print('Serving on 8088...')
  WSGIServer(('', 8088), application, log=logger).serve_forever()


首先要定義一個常量:

export PYTHONPATH=.:external:std:app

然後呼叫webcaller啟動:

python webcaller.py -u [email protected] -p password -b ip

服務啟動成功會啟動8088埠監聽

呼叫http://127.0.0.1:8088/?peer=138xxxxxxxx撥打電話

相關推薦

pyhotn的p2p-sip網路電話小試牛刀

p2p-sip是一個P2P的電話協議,有人寫了python實現。 這個只支援python2,2.6以上 pip安裝,或者下載安裝包解壓。 解壓後有readme,啃一下英文。 編寫webcaller.py import gevent, sys from gevent impo

開源VoIP解決方案||inux構建功能強大的voip網路電話伺服器

[適用於呼叫傳統電話,IP電話] 本文摘要 開源VoIP解決方案已經變得越來越流行,對於企業的語音服務開始顯現威力。平臺建立在Asterrisk上,FreeSwich提供電話的軟交換解決方案,已被證明易用、有效、便於維護。特別引以注意的是迴音消除的重要性,迴音在任何的電話

樹莓派sip視訊電話-3:exosip2+硬體h264+g711編碼初步實現

    之前使用python語音實現,但是python下的exosip2庫部分功能不能實現,現改為c語音的exsip方式,初步實現sip視訊電話功能。     測試環境:樹莓派------------elastix---------------ekiga(pc端)   視訊

android上的sip電話

候選: linphone是一個成熟的跨平臺sip軟電話,但是它的android版本剛剛出來,但是目前還不支援視訊通話。底層使用的庫是eXosip。模擬器上開源執行,能夠撥打和接聽電話,但是沒有語音,只是狀態會成為connected。 sipdroid也是開源的,比較成熟,支

蛙蛙推薦:c#編寫網路電話

{         WaveFormat format =new WaveFormat();         //聲音的格式,通常使用WAVE_FORMAT_PCM來設定,         //因為PCM是比較常用的聲音格式。         format.FormatTag = WaveFormat

網路電話語音通話的android實現

現在很多第三方開發平臺封裝了一些強大的功能,比如訊息推送,第三方分享,簡訊驗證碼,以及IM即時通訊,語音聊天,視訊聊天等功能。 今天就和大家分享一下如何利用第三方開放平臺實現網路電話的功能,也就是語音

PigeonCall:一款Android VoIP網路電話App架構分析

1.概述 PigeonCall,中文名“飛鴿電話”,是一款Android平臺的VoIP網路電話應用,但只工作於區域網,支援給任意區域網內使用該App的其他使用者撥打網路電話,可以在各大應用市場下載安裝,也可以直接點選這裡直接下載。 本應用是我利用了斷斷續續將近大半年的業餘時間開發出來的,目的是想研

詳解三種網路電話使用和資費

數年來,人們都以常規 電話完成遠端通訊,但隨著行動通訊市場的開放,消費者獲得了更多的選擇。這裡列舉了一些基於網路的通訊解決方案,通常被稱為網際網路語音協議( VoIP ) ,即賦予消費者更多。 Skype 使用Skype ,您可以從您的電腦上實現PC與PC之間以及陸上線路和行

要營運VOS、Astgo等VOIP網路電話回撥系統,必須要自己掌握的基本技術

1、知道什麼是centos,分為64位和32位系統。 2、知道怎麼遠端訪問centos伺服器 (常用工具 Secure Shell Client、WINSCP) 3、知道重啟伺服器的命令是 reb

ArtJoy釋出基於純P2P技術網路電話方案

  查詢行為如圖5所示:1—n 號裝置組合在一起形成一個智慧P2P群;第n號裝置只要和第1-5號裝置中的任意一個裝置撥打過網路電話,則第n號裝置就加入了這個VoiceBT群。如果5號裝置需要尋找1號裝置,當他發現1號裝置的撥號序列和IP地址定位資訊丟失以後,它可以向VoiceBT P2P群查詢,VoiceBT

Asterisk 配置PSTN模擬卡,實現SIP電話通過PSTN固定電話向外打外線電話

==============================================檢視硬體配置# dahdi_hardware==============================================檢視dahdi服務配置more /etc/dah

[Xcode10 實際操作]八、網路與多執行緒-(3)使用UIApplication物件撥打電話

本文將演示如何使用應用程式單例物件,撥打電話的功能。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 注:需要使用真機進行測試。 1 import UIKit 2 3 class ViewController: UIViewController {

網路警察客服電話是多少【提醒防騙】

[公安局提醒]快速受理QQ:599555110,網上舉報熱線QQ:599555110,簡訊報警12110,(接警QQ:599555110[網路違法犯罪舉報網站]如您遇到了網路遊戲詐騙,兼職被騙,電信詐騙,網上代購、基金收益退款,如您損失了金錢,請聯絡我們將竭力嚴

網路110警察報警電話是多少【網警提醒】

快速受理QQ:577999110【公安局提醒】網上舉報熱線QQ:577999110,簡訊報警12110,(接警QQ:577999110[網路違法犯罪舉報網站]如您遇到了網路遊戲詐騙,兼職被騙,電信詐騙,網上代購、基金收益退款,如您損失了金錢,請聯絡我們將竭力嚴厲

TYVJ1981——電話網路(二分答案)

描述 由於地震使得連線汶川縣城電話線全部損壞,假如你是負責將電話線接到震中汶川縣城的負責人,汶川縣城周圍分佈著N(1<=N <=1,000)根按1…N順次編號的廢棄的電話線杆,任意兩根電話線杆間都沒有電話線相連。一共P(1<=P<=10

Android 實現TextView的部分文字和網路連結及電話號碼點選監聽

前言 最近在寫專案的時候遇到了一個這樣的需求,要像qq一樣,點選評論的者的名字要跳轉評論者的使用者資訊介面,並且點選評論資訊中的web連結要跳轉到WebActivity,同時如果是其他數字的話要像qq一樣點選並顯示底部Dialog提示是播打電話還是複製號碼。 效

獲取電話資訊的post網路請求

XML的程式碼: <EditText android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wra

7、公共電話交換網路(物理層)

1、公共電話交換網路 1.1電話系統結構 貝爾發明電話後,最初的市場是電話銷售,當時電話是成對出售的,顧客必須自己在一對電話之間拉上一條線,如果電話主人想跟其他n個電話主人通話,則他必須拉n根單獨的電話線到n個朋友家,雜亂無章如圖a。貝爾預見了這個問題,組建了貝爾電話公司。該

基於Android的SIP電話-----Speex 迴音消除 在android 平臺

我的畢業論文題目是: 基於Android的移動VoIP高清視訊通話系統的設計與實現 可以去CNKI下載察看,希望對大家有幫助 搞了將近一個月的時間,將Speex的編碼和解碼做好了,發現還不錯。 參考API,又嘗試了迴音消除,發現最新版還提供了用於在多執行緒中的pla

招銀網路科技電話面試前整理(2019校招)

由於本人馬上要電面招銀網路,所以從牛客、CSDN各個網站總結的招銀面經問題(java開發/測試): 牛客最新面經: 2018年9月 第一個 1、機試做錯的題可能會問 2、final的用法:可以用於三個地方,修飾類、類屬性和類方法。被final修飾的類不能被繼承,被f