Implement CallToken support, fixes #36 - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 819317ab5c5cc3ba0ae7cd5e2bd3aa441656b083
(DIR) parent 30e3eb477e3685c65266c058ce3eaaf1b0bff9f4
(HTM) Author: HD Moore <x@hdm.io>
Date: Sun, 28 Feb 2016 18:43:58 -0600
Implement CallToken support, fixes #36
Diffstat:
M lib/warvox/proto/iax2/call.rb | 23 +++++++++++++++++++++--
M lib/warvox/proto/iax2/client.rb | 10 ++++++++--
M lib/warvox/proto/iax2/constants.rb | 15 +++++++++++++--
3 files changed, 42 insertions(+), 6 deletions(-)
---
(DIR) diff --git a/lib/warvox/proto/iax2/call.rb b/lib/warvox/proto/iax2/call.rb
@@ -19,6 +19,7 @@ class Call
attr_accessor :caller_name
attr_accessor :caller_number
attr_accessor :dtmf
+ attr_accessor :call_token
def initialize(client, src_id)
@@ -36,9 +37,9 @@ class Call
self.busy = false
self.dtmf = ''
+ self.call_token = ''
end
-
def dprint(msg)
self.client.dprint(msg)
end
@@ -59,6 +60,7 @@ class Call
# Register with the IAX endpoint
def register
+
self.client.send_regreq(self)
res = wait_for( IAX_SUBTYPE_REGAUTH, IAX_SUBTYPE_REGREJ )
return if not res
@@ -115,7 +117,24 @@ class Call
def dial(number)
self.client.send_new(self, number)
- res = wait_for(IAX_SUBTYPE_AUTHREQ, IAX_SUBTYPE_ACCEPT)
+ res = wait_for(IAX_SUBTYPE_AUTHREQ, IAX_SUBTYPE_ACCEPT, IAX_SUBTYPE_CALLTOKEN)
+ return if not res
+
+ # Handle CallToken support
+ if res[1] == IAX_SUBTYPE_CALLTOKEN
+ if res[2][IAX_IE_CALL_TOKEN]
+ # Reset sequence numbers
+ self.oseq = self.iseq = 0
+ # Store the CallToken
+ self.call_token = res[2][IAX_IE_CALL_TOKEN]
+ # Restart the call
+ self.client.send_new(self, number)
+ res = wait_for(IAX_SUBTYPE_AUTHREQ, IAX_SUBTYPE_ACCEPT)
+ else
+ dprint("NEW: No CallToken received in CALLTOKEN reply")
+ return
+ end
+ end
return if not res
# Handle authentication if its requested
(DIR) diff --git a/lib/warvox/proto/iax2/client.rb b/lib/warvox/proto/iax2/client.rb
@@ -158,14 +158,20 @@ class Client
cid = call.caller_number || self.caller_number
cid = number if cid == 'SELF'
-
+ data << create_ie(IAX_IE_PROTO_VERSION, [2].pack("n") )
data << create_ie(IAX_IE_CALLING_NUMBER, cid )
data << create_ie(IAX_IE_CALLING_NAME, call.caller_name || self.caller_name)
- data << create_ie(IAX_IE_DESIRED_CODEC, [IAX_SUPPORTED_CODECS].pack("N") )
+ data << create_ie(IAX_IE_CALLING_PRESENTATION, [1].pack("C") )
+ data << create_ie(IAX_IE_CALLING_TYPE_NUMBER, [0].pack("C") )
+ data << create_ie(IAX_IE_CALLING_TRANSIT_NETWORK_SELECT, [0].pack("n") )
+ data << create_ie(IAX_IE_DESIRED_CODEC, [IAX_CODEC_G711_MULAW].pack("N") )
data << create_ie(IAX_IE_ACTUAL_CODECS, [IAX_SUPPORTED_CODECS].pack("N") )
data << create_ie(IAX_IE_USERNAME, self.username) if self.username
data << create_ie(IAX_IE_CALLED_NUMBER, number)
data << create_ie(IAX_IE_ORIGINAL_DID, number)
+ data << create_ie(IAX_IE_CPE_ADSI_CAP, [0].pack("n"))
+ data << create_ie(IAX_IE_CALL_TOKEN, call.call_token)
+ data << create_ie(IAX_IE_FIRMWARE_BLOCK, IAX_VENDOR_STRING)
send_data( call, create_pkt( call.scall, call.dcall, call.timestamp, call.oseq, call.iseq, IAX_TYPE_IAX, data ) )
end
(DIR) diff --git a/lib/warvox/proto/iax2/constants.rb b/lib/warvox/proto/iax2/constants.rb
@@ -173,16 +173,24 @@ IAX_IE_CALLING_NUMBER = 2
IAX_IE_AUTH_METHODS = 3
IAX_IE_CALLING_NAME = 4
IAX_IE_USERNAME = 6
-IAX_IE_DESIRED_CODEC = 9
-IAX_IE_ORIGINAL_DID = 10
IAX_IE_ACTUAL_CODECS = 8
+IAX_IE_DESIRED_CODEC = 9
IAX_IE_PROTO_VERSION = 11
+IAX_IE_CPE_ADSI_CAP = 12
+IAX_IE_ORIGINAL_DID = 13
IAX_IE_REG_REFRESH = 19
IAX_IE_CHALLENGE_DATA = 15
IAX_IE_CHALLENGE_RESP = 16
IAX_IE_APPARENT_ADDR = 18
IAX_IE_REGREJ_CAUSE = 22
+IAX_IE_FIRMWARE_BLOCK = 36
+IAX_IE_CALLING_PRESENTATION = 38
+IAX_IE_CALLING_TYPE_NUMBER = 39
+IAX_IE_CALLING_TRANSIT_NETWORK_SELECT = 40
IAX_IE_HANGUP_CAUSE = 42
+IAX_IE_CALL_TOKEN = 54
+
+
=begin
+------+----------------+-------------------------------------------+
@@ -244,6 +252,7 @@ IAX_IE_HANGUP_CAUSE = 42
| | | buffer) |
| 0x33 | RR OOO | Frames received Out of Order |
| 0x34 | OSPTOKEN | OSP Token Block |
+ | 0x54 | CALL TOKEN | Call Token
+------+----------------+-------------------------------------------+
=end
@@ -260,6 +269,8 @@ IAX_SUPPORTED_CODECS = IAX_CODEC_G711_MULAW | IAX_CODEC_G711_ALAW | IAX_CODEC_L
IAX_DEFAULT_REG_REFRESH = 60
IAX_DEFAULT_TIMEOUT = 10
+# IAX Vendor
+IAX_VENDOR_STRING = "Rex IAX2 1.0"
end
end