次の項では、Oracle SALT HTTP FML32バッファ形式の情報を説明します。
Oracle Tuxedoサービスは動的HTMLコンテンツを生成するために開発される場合があります。これらのサービスではデータが特定のFML32形式で送信され、リストH-1に示されているように、別のFML32バッファでレスポンスを返す必要があります。
#include <atmi.h>
#include <userlog.h>
#include <fml32.h>
#include <httpflds.h> /* contains the HTTP field definitions */
/**
* MyService. Must match the TuxService parameter
* configured in mod_tuxedo
*/
MyService(TPSVCINFO *rqst) {
FBFR32 *response_buf;
int rc;
char *query_string;
long query_len;
char *response_body = "<html>\n<head>\n<title>Tuxedo"
"Test</title>\n</head>\n<body>\n"
"<p>Hello World</p>\n</body>\n<html>";
query_string = malloc(QUERY_SIZE);
if (query_string == NULL) {
userlog("Unable to allocate query_string: %d", errno);
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
rc = Fget32(rqst->data, QUERY_STRING, 0,
(char*)query_string,
&query_len);
if (rc < 0) {
userlog("Problem extracting query_string: %s",
Fstrerror32(Ferror32));
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
userlog("QUERY_STRING received: %s", query_string);
if((response_buf =
(FBFR32 *) tpalloc("FML32", NULL, 1024 )) == NULL) {
userlog("Unable to allocate response_buf:%s",
tpstrerror(tperrno));
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
if((response_data =
tpalloc("CARRAY", NULL, strlen(response_body) + 1) == NULL) {
userlog("Unable to allocate response_buf:%s",
tpstrerror(tperrno));
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
strcpy(response_data, response_body);
rc = Fchg32(response_buf, RESPONSE_DATA, 0,
(char*)respone_data,
0);
if (rc < 0) {
userlog("Problem setting response data: %s",
Fstrerror32(Ferror32));
tpreturn(TPFAIL, 0, NULL, 0L, 0);
}
tpreturn(TPSUCCESS, 0, (char *)response_buf, 0L, 0);
}
mod_tuxedo
による起動時に、Oracle Tuxedoサービスは表H-1に示すようなFML32バッファを受け取ります。
mod_tuxedo
で呼び出されるOracle Tuxedoサーバーは、表H-2に示されているフィールドが含まれるFML32バッファを返す必要があります。その他のタイプのバッファを返したり、いずれかの必須フィールドがない場合は、サーバー・エラーが発生してクライアント・ブラウザに返される結果になります。