File: client.rb

package info (click to toggle)
soap4r 1.4.8-4
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,472 kB
  • ctags: 2,206
  • sloc: ruby: 19,295; makefile: 58; sh: 41; perl: 10
file content (108 lines) | stat: -rwxr-xr-x 2,651 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env ruby

require 'soap/driver'
require 'iSubscribeService'
require 'sha1'
require 'base64'
include SOAP


###
## Definitions.
#
proxy = ARGV.shift || nil
msgRouterURL = 'http://localhost:8082/soap/servlet/messagerouter'
rpcRouterURL = 'http://localhost:8082/soap/servlet/rpcrouter'
$privateKey = "private!"
$userId = 'SOAP4R user #1'
$subscribeAddress = 'nahi@keynauts.com'

# Create drivers for RPC interface and Messaging interface.
msgDrv = Driver.new( nil, $0, ISubscribeService::MSGInterfaceNS,
  msgRouterURL, proxy )
ISubscribeService::addMSGMethod( msgDrv )

rpcDrv = Driver.new( nil, $0, ISubscribeService::RPCInterfaceNS,
  rpcRouterURL, proxy )
ISubscribeService::addRPCMethod( rpcDrv )

def calcDigest( userId, token )
  encode64( SHA1.new( $privateKey + userId + token ).digest )
end


###
## Connect RPC server to get a ticket.
#
def getTicket( drv )
  token = drv.challenge( $userId )
  puts "Got token: #{ token }."
  encodedResponse = calcDigest( $userId, token )

  # Preparing header items in SOAP Header.
  authEle = SOAPElement.new( ISubscribeService::MSGInterfaceNS, 'auth' )
  authEle.add( SOAPElement.new( nil, 'token', token ))
  authEle.add( SOAPElement.new( nil, 'response', encodedResponse ))
  return authEle
end


###
## Send submit request to message server.
#
# Preparing headerItems in SOAP Header.
headerItems = [ getTicket(rpcDrv) ]

# Preparing message in SOAP Body.
msg = SOAPElement.new( ISubscribeService::MSGInterfaceNS, 'subscribe' )
address = SOAPElement.new( nil, 'address', $subscribeAddress )
address.attr[ 'type' ] = 'mailto'
msg.add( address )

# Invoke.
msgDrv.invoke( headerItems, msg )


###
## Send a request to message server and get list.
#
# Preparing headerItems in SOAP Header.
headerItems = [ getTicket(rpcDrv) ]

# Preparing message in SOAP Body.
msg = SOAPElement.new( ISubscribeService::MSGInterfaceNS, 'list' )

# Invoke.
data = msgDrv.invoke( headerItems, msg )
puts data.receiveString


sleep 10;
###
## Send delete request to message server.
#
# Preparing headerItems in SOAP Header.
headerItems = [ getTicket(rpcDrv) ]

# Preparing message in SOAP Body.
msg = SOAPElement.new( ISubscribeService::MSGInterfaceNS, 'bye' )
address = SOAPElement.new( nil, 'address', $subscribeAddress )
address.attr[ 'type' ] = 'mailto'
msg.add( address )

# Invoke.
msgDrv.invoke( headerItems, msg )


###
## Send listing request again.
#
# Preparing headerItems in SOAP Header.
headerItems = [ getTicket(rpcDrv) ]

# Preparing message in SOAP Body.
msg = SOAPElement.new( ISubscribeService::MSGInterfaceNS, 'list' )

# Invoke.
data = msgDrv.invoke( headerItems, msg )
puts data.receiveString