/** * Accept incoming RFC connection (for RFC server) * * @param [progid] PROGRAM ID * @param [gwhost] SAP gateway host * @param [gwserv] SAP gateway service * if parameters is no set, $argv * is used * * @return SAPRFC_OK on success, <> SAPRFC_OK on failure */ function Accept($progid = "", $gwhost = "", $gwserv = "") { global $argv; if ($this->rfc) { $this->Close(); } if (empty($progid) && empty($gwhost) && empty($gwserv)) { for ($i = 0; $i < count($argv); $i++) { switch ($argv[$i]) { case '-a': $progid = $argv[$i + 1]; break; case '-g': $gwhost = $argv[$i + 1]; break; case '-x': $gwserv = $argv[$i + 1]; break; } } $this->rfc = @saprfc_server_accept($argv); } else { $this->rfc = @saprfc_server_accept("-a {$progid} -g {$gwhost} -x {$gwserv}"); } if ($this->rfc == false) { return $this->SetStatus(SAPRFC_ERROR, @saprfc_error()); } $this->serverReg = array("progid" => $progid, "gwhost" => $gwhost, "gwserv" => $gwserv); if ($this->trace) { $this->EnableTrace(); } else { $this->DisableTrace(); } if (!empty($this->codePage)) { $this->SetCodePage($this->codePage); } return $this->SetStatus(SAPRFC_OK, ""); }
function main($argc, $argv) { global $rfc_handle, $tid_file, $lock_file, $datetime, $trace_fp, $stderr; global $working_dir; $stderr = fopen ("php://stderr","a"); if ($argc == 1) { help(); exit(); } /*------------------------------------------------------------------*/ /* Output argument list */ /*------------------------------------------------------------------*/ fputs ($stderr,sprintf("\nargc = %d", $argc)); for ($i=0; $i<$argc; $i++) fputs ($stderr,sprintf("\nargv[%d] = '%s'", $i, $argv[$i])); fflush($stderr); /*------------------------------------------------------------------*/ /* Get working directory and names of TID- and LOCK-file */ /*------------------------------------------------------------------*/ $working_dir = getenv("TRFC_WORK_DIR"); if (! empty ($working_dir) ) $working_dir.="/"; $tid_file = $working_dir."trfcserv.tid"; $lock_file = $working_dir."trfcserv.lck"; if (getenv ("TRFC_TRACE") != "" && getenv ("TRFC_TRACE") != "0") { create_file_name ($trace_file); $trace_file.=".trc"; $trace_fp = fopen ($trace_file,"a"); } else $trace_fp = false; $tbuf = "\n********************************\n"; $datetime = date("D M j G:i:s Y"); $tbuf .= sprintf("* %s *\n", $datetime); $tbuf .= "********************************\n"; TRFC_trace($tbuf); /*------------------------------------------------------------------*/ /* Initialize the TID management */ /*------------------------------------------------------------------*/ init_TID(); /*------------------------------------------------------------------*/ /* Accept RFC-Connection */ /*------------------------------------------------------------------*/ $tbuf = "\n<== RfcAccept rfc_handle = "; TRFC_trace($tbuf); $rfc_handle = saprfc_server_accept ($argv); if ($rfc_handle == false) { $tbuf = "RFC_HANDLE_NULL"; TRFC_trace($tbuf); rfc_error("RfcAccept"); } $tbuf = sprintf("%u", $rfc_handle); TRFC_trace($tbuf); /*------------------------------------------------------------------*/ /* Install offering functions */ /*------------------------------------------------------------------*/ $rfc_rc = install(); if( $rfc_rc != SAPRFC_OK ) exit; /*------------------------------------------------------------------*/ /* Wait for Remote Function Call */ /*------------------------------------------------------------------*/ do { $tbuf = "\n\nWait for next RFC call ....."; TRFC_trace($tbuf); $rfc_rc = saprfc_trfc_dispatch($rfc_handle,$GLOBAL_FCE_LIST); $tbuf = sprintf("\n<== RfcDispatch rfc_rc = %d", $rfc_rc); TRFC_trace($tbuf); } while ($rfc_rc == SAPRFC_OK); if ($trace_fp != false) fclose($trace_fp); exit; }
$GLOBAL_FCE_LIST[RFC_READ_REPORT] = saprfc_function_define(0,"RFC_READ_REPORT",$DEF_RFC_READ_REPORT); // PHP server function function RFC_READ_REPORT ($fce) { $REPORT = saprfc_server_import ($fce,"PROGRAM"); saprfc_table_init ($fce,"QTAB"); $fd = fopen ($REPORT,"r"); if (!$fd) return ("NOTFOUND"); // raise exception "NOTFOUND" while (!feof($fd)) { $LINE = fgets ($fd,73); saprfc_table_append ($fce,"QTAB",array("LINE"=>$LINE)); } fclose ($fd); saprfc_server_export ($fce,"SYSTEM","PHP"); return (true); } // Call script with: ./server.php -a phpgw -g hostname -x sapgw00 $rfc = saprfc_server_accept ($argv); // Dispatch one function call $rc = saprfc_server_dispatch ($rfc,$GLOBAL_FCE_LIST); saprfc_close ($rfc); ?>