<?php
/*  F/T's SSTP Client Class
    Version 1.00 2000.01.03
    Programmed by FUKAYA Takashi

    SSTPプロトコルでSSTPサーバ(偽春奈)へリクエストを送ります。
    現状は、Sendリクエストのみ実装
*/
class FTSSTP {
    var 
$hosradr;        // SSTPサーバのアドレス (デフォルトでアクセス元のローカルマシン)
    
var $port;            // SSTPサーバのポート番号 (デフォルトで 11000)
    
var $sendername;    // SSTPクライアント名

    
var $lastsockerrmsg;// SSTPサーバ接続時のSocketエラーメッセージ
    
var $lastresult;    // SSTPサーバ応答文字列

    // コンストラスタ
    
function FTSSTP() {
        
$this->hostadr=getenv(HTTP_X_FORWARDED_FOR);
        if ( 
$this->hostadr == "" $this->hostadr=getenv(REMOTE_ADDR);
        
// $this->port=11000;
        
$this->port=9801;   // 2001.06.10 SSTP/1.1 に対応        
        
$this->sendername "F/T's SSTP Client Class";
    }

    
// SENDリクエスト (偽春奈に発言させる)
    //        入力パラメータ
    //              $msg;発言内容 (終端の\eは不要)
    //           $option:オプション文字列(ex. "notranslate")
    //
    //        戻り値:エラー/ステータスコード
    //                 -1:接続が確立できなかった
    //               -2:SSTPサーバから正常な応答がなかった
    //                200:正常終了 (SSTPステータスコード)
    //            400以降:エラー   (SSTPステータスコード)
    
function Send($msg $option="") {
        
$errno 0;
        
$this->lastsockerrmsg "";
        
$this->lastresult="";

        
$sid fsockopen(  $this->hostadr  $this->port $errno $this->lastsockerrmsg );
        if ( 
$sid == ) return -1;                                            // 接続エラー

        
fputs$sid "SEND SSTP/1.1\r\n");

        
fputs$sid "Sender: " $this->sendername "\r\n");
        
fputs$sid "Script: " i18n_convert($msg,"SJIS") . "\\e\r\n");
        if ( 
$option != "" ) {
            
fputs$sid "Option: " $option "\\e\r\n");
        }
        
fputs$sid "\r\n");

        while (!
feof($sid)) {
            
$this->lastresult $this->lastresult fgets ($sid,128);
        }
        
fclose$sid );

//        if ( substr($this->lastresult,0,8) != "SSTP/1.0" ) return -2;        // 応答文字列エラー
        
if ( substr($this->lastresult,0,5) != "SSTP/" ) return -2;        // 応答文字列エラー

        
return (int)substr($this->lastresult,9,3);                            // SSTPステータスコードを返す
    
}
}

?>