1 # A Perl module for communicating with the MO Submit Server
2 # (c) 2007 Martin Mares <mj@ucw.cz>
10 use IO::Socket::SSL; # qw(debug3);
15 "Server" => "localhost:8888",
16 "Key" => "client-key.pem",
17 "Cert" => "client-cert.pem",
18 "CACert" => "ca-cert.pem",
23 # FIXME: Read config file
28 my ($self, $msg) = @_;
29 print STDERR "LOG: $msg\n";
33 my ($self, $msg) = @_;
34 print STDERR "ERROR: $msg\n";
35 $self->{"error"} = $msg;
40 return defined $self->{"sk"};
45 if ($self->is_connected) {
47 $self->{"sk"} = undef;
48 $self->log("Disconnected");
54 !defined $self->{"sk"} or close $self->{"sk"};
55 $self->log("Connecting to submit server");
56 my $sk = new IO::Socket::INET(
57 PeerAddr => $self->{"Server"},
61 $self->err("Cannot connect to server: $!");
66 $self->err("Server failed to send a welcome message");
72 $self->err("Server rejected the connection: $z");
77 $self->log("Starting TLS");
78 $sk = IO::Socket::SSL->start_SSL(
80 SSL_version => 'TLSv1',
82 SSL_key_file => "client-key.pem",
83 SSL_cert_file => "client-cert.pem",
84 SSL_ca_file => "ca-cert.pem",
88 $self->err("Cannot establish TLS connection: " . IO::Socket::SSL::errstr());
94 $self->log("Logging in");
95 my $req = new Sherlock::Object("U" => $self->{"user"});
96 my $reply = $self->request($req);
97 my $err = $reply->get("-");
99 $self->err("Cannot log in: $err");
104 $self->log("Connected");
109 my ($self, $obj) = @_;
110 my $sk = $self->{"sk"};
111 $obj->write($sk); ### FIXME: Flushing
117 my ($self, $obj) = @_;
118 my $sk = $self->{"sk"};
119 my $reply = new Sherlock::Object;
120 if ($reply->read($sk)) {
123 $self->err("Connection broken");