123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- package OpenSim::Utility;
- use strict;
- use XML::RPC;
- use XML::Simple;
- use Data::UUID;
- use DBHandler;
- use OpenSim::Config;
- use Socket;
- sub XMLRPCCall {
- my ($url, $methodname, $param) = @_;
- my $xmlrpc = new XML::RPC($url);
- my $result = $xmlrpc->call($methodname, $param);
- return $result;
- }
- sub XMLRPCCall_array {
- my ($url, $methodname, $param) = @_;
- my $xmlrpc = new XML::RPC($url);
- my $result = $xmlrpc->call($methodname, @$param);
- return $result;
- }
- sub UIntsToLong {
- my ($int1, $int2) = @_;
- return $int1 * 4294967296 + $int2;
- }
- sub getSimpleResult {
- my ($sql, @args) = @_;
- my $dbh = &DBHandler::getConnection($OpenSim::Config::DSN, $OpenSim::Config::DBUSER, $OpenSim::Config::DBPASS);
- my $st = new Statement($dbh, $sql);
- return $st->exec(@args);
- }
- sub GenerateUUID {
- my $ug = new Data::UUID();
- my $uuid = $ug->create();
- return $ug->to_string($uuid);
- }
- sub ZeroUUID {
- return "00000000-0000-0000-0000-000000000000";
- }
- sub HEX2UUID {
- my $hex = shift;
- Carp::croak("$hex is not a uuid") if (length($hex) != 32);
- my @sub_uuids = ($hex =~ /(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})/);
- return join("-", @sub_uuids);
- }
- sub BIN2UUID {
- # TODO:
- }
- sub UUID2HEX {
- my $uuid = shift;
- $uuid =~ s/-//g;
- return $uuid;
- }
- sub UUID2BIN {
- my $uuid = shift;
- return pack("H*", &UUID2HEX($uuid));
- }
- sub HttpPostRequest {
- my ($url, $postdata) = @_;
- $url =~ /http:\/\/([^:\/]+)(:([0-9]+))?(\/.*)?/;
- my ($host, $port, $path) = ($1, $3, $4);
- $port ||= 80;
- $path ||= "/";
- my $CRLF= "\015\012";
- my $addr = (gethostbyname($host))[4];
- my $name = pack('S n a4 x8', 2, $port, $addr);
- my $data_len = length($postdata);
- socket(SOCK, PF_INET, SOCK_STREAM, 0);
- connect(SOCK, $name) ;
- select(SOCK); $| = 1; select(STDOUT);
- print SOCK "POST $path HTTP/1.0$CRLF";
- print SOCK "Host: $host:$port$CRLF";
- print SOCK "Content-Length: $data_len$CRLF";
- print SOCK "$CRLF";
- print SOCK $postdata;
- my $ret = "";
- unless (<SOCK>) {
- close(SOCK);
- Carp::croak("can not connect to $url");
- }
- my $header = "";
- while (<SOCK>) {
- $header .= $_;
- last if ($_ eq $CRLF);
- }
- if ($header != /200/) {
- return $ret;
- }
- while (<SOCK>) {
- $ret .= $_;
- }
- return $ret;
- }
- # TODO : merge with POST
- sub HttpGetRequest {
- my ($url) = @_;
- $url =~ /http:\/\/([^:\/]+)(:([0-9]+))?(\/.*)?/;
- my ($host, $port, $path) = ($1, $3, $4);
- $port ||= 80;
- $path ||= "/";
- my $CRLF= "\015\012";
- my $addr = (gethostbyname($host))[4];
- my $name = pack('S n a4 x8', 2, $port, $addr);
- socket(SOCK, PF_INET, SOCK_STREAM, 0);
- connect(SOCK, $name) ;
- select(SOCK); $| = 1; select(STDOUT);
- print SOCK "GET $path HTTP/1.0$CRLF";
- print SOCK "Host: $host:$port$CRLF";
- print SOCK "$CRLF";
- unless (<SOCK>) {
- close(SOCK);
- Carp::croak("can not connect to $url");
- }
- while (<SOCK>) {
- last if ($_ eq $CRLF);
- }
- my $ret = "";
- while (<SOCK>) {
- $ret .= $_;
- }
- return $ret;
- }
- sub XML2Obj {
- my $xml = shift;
- my $xs = new XML::Simple( keyattr=>[] );
- return $xs->XMLin($xml);
- }
- sub Log {
- my $server_name = shift;
- my @param = @_;
- open(FILE, ">>" . $OpenSim::Config::DEBUG_LOGDIR . "/" . $server_name . ".log");
- foreach(@param) {
- print FILE $_ . "\n";
- }
- print FILE "<<<<<<<<<<<=====================\n\n";
- close(FILE);
- }
- 1;
|