예제 #1
0
 protected static function unserializeSub(\fpoirotte\Pssht\Wire\Decoder $decoder)
 {
     $passChange = $decoder->decodeBoolean();
     $res = array($decoder->decodeString());
     if ($passChange === true) {
         $res[] = $decoder->decodeString();
     }
     return $res;
 }
예제 #2
0
 protected static function unserializeSub(\fpoirotte\Pssht\Wire\Decoder $decoder)
 {
     $signature = $decoder->decodeBoolean();
     $algorithm = $decoder->decodeString();
     $res = array($algorithm, $decoder->decodeString());
     if ($signature === true) {
         $decoder2 = new \fpoirotte\Pssht\Wire\Decoder(new \fpoirotte\Pssht\Buffer($decoder->decodeString()));
         if ($decoder2->decodeString() !== $algorithm) {
             throw new \InvalidArgumentException();
         }
         $res[] = $decoder2->decodeString();
     }
     return $res;
 }
예제 #3
0
파일: REQUEST.php 프로젝트: fpoirotte/pssht
 public function handle($msgType, \fpoirotte\Pssht\Wire\Decoder $decoder, \fpoirotte\Pssht\Transport $transport, array &$context)
 {
     $encoder = new \fpoirotte\Pssht\Wire\Encoder();
     $channel = $decoder->decodeUint32();
     $type = $decoder->decodeString();
     $wantsReply = $decoder->decodeBoolean();
     $encoder->encodeUint32($channel);
     $encoder->encodeString($type);
     $encoder->encodeBoolean($wantsReply);
     $decoder->getBuffer()->unget($encoder->getBuffer()->get(0));
     $remoteChannel = $this->connection->getChannel($channel);
     switch ($type) {
         case 'exec':
         case 'shell':
         case 'pty-req':
             // Normalize the name.
             // Eg. "pty-req" becomes "PtyReq".
             $cls = str_replace(' ', '', ucwords(str_replace('-', ' ', $type)));
             $cls = '\\fpoirotte\\Pssht\\Messages\\CHANNEL\\REQUEST\\' . $cls;
             $message = $cls::unserialize($decoder);
             break;
         default:
             if ($wantsReply) {
                 $response = new \fpoirotte\Pssht\Messages\CHANNEL\FAILURE($remoteChannel);
                 $transport->writeMessage($response);
             }
             return true;
     }
     if (!$wantsReply) {
         return true;
     }
     if (in_array($type, array('shell', 'exec'), true)) {
         $response = new \fpoirotte\Pssht\Messages\CHANNEL\SUCCESS($remoteChannel);
     } else {
         $response = new \fpoirotte\Pssht\Messages\CHANNEL\FAILURE($remoteChannel);
     }
     $transport->writeMessage($response);
     if (in_array($type, array('shell', 'exec'), true)) {
         $callable = $transport->getApplicationFactory();
         if ($callable !== null) {
             call_user_func($callable, $transport, $this->connection, $message);
         }
     }
     return true;
 }
예제 #4
0
파일: KEXINIT.php 프로젝트: fpoirotte/pssht
 public static function unserialize(\fpoirotte\Pssht\Wire\Decoder $decoder)
 {
     $res = new static(new \fpoirotte\Pssht\Random\Fixed($decoder->decodeBytes(16)), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeNameList(), $decoder->decodeBoolean());
     $decoder->decodeUint32();
     // Reserved
     return $res;
 }
예제 #5
0
파일: Base.php 프로젝트: fpoirotte/pssht
 public static final function unserialize(\fpoirotte\Pssht\Wire\Decoder $decoder)
 {
     $reflector = new \ReflectionClass(get_called_class());
     $args = array_merge(array($decoder->decodeUint32(), $decoder->decodeString(), $decoder->decodeBoolean()), static::unserializeSub($decoder));
     return $reflector->newInstanceArgs($args);
 }
예제 #6
0
파일: DEBUG.php 프로젝트: fpoirotte/pssht
 public static function unserialize(\fpoirotte\Pssht\Wire\Decoder $decoder)
 {
     return new static($decoder->decodeBoolean(), $decoder->decodeString(), $decoder->decodeString());
 }
예제 #7
0
 protected static function unserializeSub(\fpoirotte\Pssht\Wire\Decoder $decoder)
 {
     return array($decoder->decodeString(), $decoder->decodeBoolean(), $decoder->decodeString(), $decoder->decodeString());
 }