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.
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.