Lior Gradstein’s Blog

If you configured your Asterisk/FreeSWITCH server to talk to your freephonie.net (french Free ISP provider), you’ll see in the logs the following warning message:

[Feb 12 09:29:06] WARNING[9228]: chan_sip.c:6624 determine_firstline_parts: Bad request protocol Packet

This is not really a problem, but an annoyance, as it fills up your logs. This is a known problem for more than years, but has never been corrected (neither by Asterisk nor by Cirpack devs). The usual correction was to add the following line to your startup scripts (/etc/rc.local on Debian for example):

iptables -A INPUT -p udp -m udp –dport 5060 -m stringstring "Cirpack KeepAlive Packet" -j DROP

But the syntax has changed in iptables, and you’ll get the error:

iptables v1.3.6: STRING match: You must specify `–algo

so, just add one of the 2 available algorithms (bm and kmp):

iptables -A INPUT -p udp -m udp –dport 5060 -m stringstring "Cirpack KeepAlive Packet" –algo bm -j DROP

  • 0 Comments
  • Filed under: asterisk, software, voip
  • How to dial a number using Asterisk and Python

    I didn’t find any example in Python on how to Dial a number from an Asterisk server and link it to another channel. So here’s a quick code to do it. You just need to have a manager defined in your /etc/asterisk/manager.conf defined.

    import socket

    HOST="192.168.1.116"
    PORT=5038

    p = """Action: login
    Events: off
    Username: %(username)s
    Secret: %(password)s

    Action: originate
    Channel: SIP/%(local_user)s
    WaitTime: 60
    CallerId: 600
    Exten: %(phone_to_dial)s
    Context: default
    Priority: 1

    Action: Logoff
    """
    def click_to_call(phone_to_dial, username, password, local_user):
        pattern = p % {
                ‘phone_to_dial’: phone_to_dial,
                ‘username’: username,
                ‘password’: password,
                ‘local_user’: local_user}

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((HOST, PORT))

        data = s.recv(1024)
        for l in pattern.split(‘n’):
            print "Sending>", l
            s.send(l+‘rn’)
            if l == "":
                data = s.recv(1024)
                print data
        data = s.recv(1024)
        s.close()

    if __name__ == ‘__main__’:
        click_to_call(phone_to_dial=‘123456789′,
                      username=‘manager_login’, password=‘yourpass’,
                      local_user=‘600′)

  • 1 Comment
  • Filed under: asterisk, python, voip
  • Photos of Ido and Oren

    2009-11-22 14.53.56.jpg2009-11-22 14.53.40.jpg2009-11-22 14.33.25.jpg2009-11-22 14.33.14.jpg2009-11-22 14.30.32.jpg2009-11-22 14.28.49.jpg2009-11-22 14.05.22.jpg2009-11-22 14.05.12.jpg2009-11-22 14.05.07.jpg

    Search engine optimization by SEO Design Solutions