#!/bin/env perl use strict; use XML::Simple; use Data::Dumper; sub handle_form { my ($ci, $arg) = @_; do_handle_form($ci, $arg); } sub handle_xml { my ($ci, $arg) = @_; do_handle_xml($ci, $arg); } sub do_handle_form { my ($ci, $arg) = @_; my $data = ${$arg}{'data'}; my $op = ${$arg}{'operation'}; my $cname = ${$ci}{'name'}; dolog("do_handle_form: cname=$cname"); dolog("do_handle_form: op=$op data=$data"); if($op eq '0') { # Pass 1 - Create auth data and message from parameters my $params = parse_form_data($data); my $username = $params->{'u'}; my $password = $params->{'p'}; my $recipient = $params->{'r'}; my $text = $params->{'t'}; dolog("do_handle_form: username=$username password=$password recipient=$recipient text=$text"); # Set real auth parameters ${$arg}{'username'} = $username; ${$arg}{'password'} = $password; # Mandatory parameters missing? if($recipient eq '' || $text eq '') { # Return fail ${$arg}{'status'} = 500; return; } # Compose message my %message = (); $message{'message'} = $text; $message{'destaddr'} = $recipient; ${$arg}{'messages'} = \%message; # Return ok ${$arg}{'status'} = 202; ${$arg}{'data'} = ''; } else { # Pass 2 - Finalize response to client my $m = ${$arg}{'message'}; # We simply return the message id ${$arg}{'data'} .= ${$m}{'id'}; } } sub do_handle_xml { my ($ci, $arg) = @_; my $data = ${$arg}{'data'}; my $op = ${$arg}{'operation'}; my $cname = ${$ci}{'name'}; dolog("do_handle_xml: cname=$cname"); dolog("do_handle_xml: op=$op data=$data"); if($op eq '0') { # Pass 1 - Create auth data and message from parameters my $xml = XMLin($data); dolog("do_handle_xml: xml=" . Dumper($xml)); my $username = $xml->{'authentication'}->{'username'}; my $password = $xml->{'authentication'}->{'password'}; my $recipient = $xml->{'msisdn'}; my $text = $xml->{'user-data-raw'}; dolog("do_handle_xml: username=$username password=$password recipient=$recipient text=$text"); # Set real auth parameters ${$arg}{'username'} = $username; ${$arg}{'password'} = $password; # Mandatory parameters missing? if($recipient eq '' || $text eq '') { # Return fail ${$arg}{'status'} = 500; return; } # Compose message my %message = (); $message{'message'} = $text; $message{'destaddr'} = $recipient; ${$arg}{'messages'} = \%message; # Return ok ${$arg}{'status'} = 202; ${$arg}{'data'} = ''; } else { # Pass 2 - Finalize response to client my $m = ${$arg}{'message'}; # We simply return the message id ${$arg}{'data'} .= ${$m}{'id'}; } } # Do some logging during development sub dolog { my $str = shift; open(OUT, ">>/tmp/httphandler.log"); print OUT "$str\n"; close(OUT); } # Helper function for parsing form data sub parse_form_data { my $data = shift; my @params = split(/&/, $data); my $param_hash; foreach my $param (@params) { my($name, $value) = split (/=/, $param); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~s///g; $param_hash->{$name} = $value; } return $param_hash; }