Tadashi Okoshi
slash****@users*****
2005年 6月 28日 (火) 00:29:39 JST
Index: affelio/lib/Affelio/SNS/Handshaker_s.pm diff -u affelio/lib/Affelio/SNS/Handshaker_s.pm:1.3 affelio/lib/Affelio/SNS/Handshaker_s.pm:1.4 --- affelio/lib/Affelio/SNS/Handshaker_s.pm:1.3 Sun Jun 26 20:46:06 2005 +++ affelio/lib/Affelio/SNS/Handshaker_s.pm Tue Jun 28 00:29:39 2005 @@ -4,13 +4,15 @@ # http://affelio.jp/ (Japan) # http://affelio.jp/ (USA and other area) # -# $Id: Handshaker_s.pm,v 1.3 2005/06/26 11:46:06 slash5234 Exp $ +# $Id: Handshaker_s.pm,v 1.4 2005/06/27 15:29:39 slash5234 Exp $ use strict; use XMLRPC::Transport::HTTP; use lib("../../../extlib/"); use DBI; +use Crypt::RC5; use Crypt::DH; +use MIME::Base64::Perl; use lib("../../"); use Affelio; use Affelio::SNS::MailAck; @@ -42,7 +44,7 @@ use strict; use Exporter; @Affelio::SNS::Handshaker_s::ISA = "Exporter"; - @Affelio::SNS::Handshaker_s::EXPORT = qw (HandShake HandShakeReply F2List); + @Affelio::SNS::Handshaker_s::EXPORT = qw (HandShake HandShakeReply F2List post_Message); use vars qw( $AF_DIR); @@ -79,6 +81,77 @@ ################################################################## + #Receive Message + ################################################################## + sub post_Message { + my $self = shift; + my $af = Affelio::SNS::Handshaker_s::Util::af_new(); + + #Proto_ver=1: Simple messaging among friends + + ################################################## + #Distill args + ################################################## + my ($proto_ver, + $timestamp, + $peer_afid, + $MIMed_mesg) = @_; + + my $passAB = $af->{fm}->get_attribute_by_afid($peer_afid, "password"); + if(!defined($passAB) || $passAB eq ""){ + return { + flerror => XMLRPC::Data->type('boolean', 0), + message => "ERR: Youre not my friend." + }; + } + + my $encrypted = MIME::Base64::Perl::decode_base64($MIMed_mesg); + + my $rc5 = Crypt::RC5->new($passAB, 12 ); + my $plain = $rc5->decrypt($encrypted); + + my ($padding, $src, + $msg_from, $msg_from_nickname, $msg_to, + $msg_timestamp, $msg_MIMed_title, $msg_MIMed_body) + =split('\*', $plain); + + if($src ne $peer_afid){ + return { + flerror => XMLRPC::Data->type('boolean', 0), + message => "ERR: Invalid Encryption." + }; + } + + my $msg_title = MIME::Base64::Perl::decode_base64($msg_MIMed_title); + my $msg_body = MIME::Base64::Perl::decode_base64($msg_MIMed_body); + + ########################################### + # Post this message to Message Manager + ########################################### + Affelio::misc::Debug::debug_print("server.PostMesg: $proto_ver, $msg_from $msg_from_nickname $msg_to $msg_timestamp $msg_title $msg_body"); + + $msg_body =~ s/\r\n/\n/g; + $msg_body =~ s/\r/\n/g; + $msg_body =~ s/\n/<BR>/g; + + $msg_from = "<A HREF=\"$msg_from\">$msg_from_nickname</A>"; + + $af->{mesgm}->post_message($msg_from, + $msg_title, + "UserToUser/OneToOne", + "$msg_body"); + + ########################################### + # Reply to client + ########################################### + my $msg = "OK: Thanks for your message."; + return { + flerror => XMLRPC::Data->type('boolean', 0), + message => $msg + }; + } + + ################################################################## #Accept HandShake from a client ################################################################## sub HandShake { @@ -105,7 +178,7 @@ my $message_body="You got a link request from <A HREF=\"$peer_af_id\">$peer_nickname</A>. Click <A HREF=\"$af->{site__web_root}/bin/recv_mail_ack.cgi?id=$sessionid\">here</A> to approve it."; $af->{mesgm}->post_message("Your Affelio", "Link Request from $peer_nickname", - "linkrequest", + "SystemToUser/LinkRequest", $message_body); ###########################################