tayler6000 / pyVoIP

Pure python VoIP/SIP/RTP library. Currently supports PCMA, PCMU, and telephone-event
https://pypi.org/project/pyVoIP/
GNU General Public License v3.0
225 stars 96 forks source link

I'm not able to register my SIP server. #276

Open Shakirsadiq6 opened 6 days ago

Shakirsadiq6 commented 6 days ago
import logging
from pyVoIP.VoIP import VoIPPhone, InvalidStateError
import socket

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

def get_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        s.connect(('10.255.255.255', 1))
        IP = s.getsockname()[0]
    except Exception:
        IP = '127.0.0.1'
    finally:
        s.close()
    return IP

def answer(call):
    try:
        # logger.info(f"Received call from {call.caller_id}")
        call.answer()
        input("Press Enter to hang up the call...")
        call.hangup()
    except InvalidStateError as e:
        logger.error(f"Error handling call: {str(e)}")
    except Exception as e:
        logger.error(f"Unexpected error: {str(e)}")

if __name__ == "__main__":
    sip_server = "server"
    sip_port = port
    username = "username"
    password = "password"
    local_ip = get_local_ip()

    logger.info(f"Attempting to register with SIP server: {sip_server}:{sip_port}")
    logger.info(f"Using local IP: {local_ip}")

    try:
        phone = VoIPPhone(
            sip_server,
            sip_port,
            username,
            password,
            callCallback=answer,
            myIP=local_ip,
            sipPort=5060,
            rtpPortLow=10000,
            rtpPortHigh=20000
        )

        phone.start()
        logger.info("SIP registration successful. Phone is now active.")
        logger.info("Waiting for incoming calls...")
        logger.info("Press Ctrl+C to stop the phone and exit.")

        while True:
            pass

    except KeyboardInterrupt:
        logger.info("Stopping phone...")
    except Exception as e:
        logger.error(f"An error occurred: {str(e)}")
    finally:
        if 'phone' in locals():
            phone.stop()
            logger.info("Phone stopped.")

Output: INFO:main:Attempting to register with SIP server: "SIP_SERVER" INFO:main:Using local IP: "MY_IP" INFO:main:Started VoIP phone. Checking registration status... ERROR:main:SIP registration failed or status is unknown. Final status: PhoneStatus.REGISTERING INFO:main:Waiting for incoming calls... INFO:main:Press Ctrl+C to stop the phone and exit.

shakir-snakescript commented 2 days ago

The issue was resolved after adding my IP to the whitelist on the SIP server.