共用方式為


RECEIVE_ALLOCATE_EX

RECEIVE_ALLOCATE_EX動詞命令接受新的 VCB 結構,以允許註冊附加管理員。

語法

  
typedef struct receive_allocate_ex {  
    unsigned short    opcode;  
        unsigned char     opext;   
        unsigned char     format;  
        unsigned short    primary_rc;  
        unsigned long    secondary_rc;  
       unsigned char     tp_name[64];  
       unsigned char     tp_id[8];  
       unsigned long     conv_id;  
       unsigned char     sync_level;  
        unsigned char    conv_type;  
        unsigned char     user_id[10];  
       unsigned char     lu_alias[8];  
       unsigned char     plu_alias[8];  
       unsigned char     mode_name[8];  
       unsigned char     reserv3[2];  
       unsigned long     conv_group_id;  
       unsigned char     fqplu_name[17];  
       unsigned char     pip_incoming;  
       unsigned long     timeout;  
       unsigned char     password[10];  
       unsigned char     reserv5[2];  
       unsigned char     attach_id[8];  
 }  

成員

opcode
提供的參數:RECEIVE_ALLOCATE_EX

opext
提供的參數。 指定動詞作業延伸模組,AP_BASIC_CONVERSATION。

format
保留參數。

primary_rc
傳回的參數。 指定APPC在動詞完成時設定的主要傳回碼。 有效的傳回碼會根據所發出的APPC動詞而有所不同。

secondary_rc
傳回的參數。 指定APPC在動詞完成時所設定的次要傳回碼。 有效的傳回碼會根據所發出的APPC動詞而有所不同。

tp_name
提供的參數。 tp_name只是傳回的參數。 不過,應用程式必須配置足夠的緩衝區空間來保存 tp_name (也就是64個字元),並將名稱初始化為EBCDIC空格 (十六進位 X'40')

傳回的動詞將包含遠端系統傳送的實際 TP 名稱。

tp_id
傳回的參數。 識別本機 TP。

conv_id
傳回的參數。 提供交談標識碼。 它會識別兩個合作夥伴 TP 之間已建立的交談 APPC。

sync_level
傳回的參數。 指定交談的同步處理層級。 它會判斷 TP 是否可以要求確認接收數據,以及確認收到數據。

  • AP_NONE 指定不會在此交談中使用確認處理。

  • AP_CONFIRM_SYNC_LEVEL 指定 TP 可以使用此交談中的確認處理。

    AP_SYNCPT 指定 TP 可以使用此交談中的同步點層級 2 確認處理。

    conv_type
    傳回的參數。 使用 MC_ALLOCATEALLOCATE,指定夥伴 TP 選擇的交談類型。 以下是可能的值:

    AP_BASIC_CONVERSATION

    AP_MAPPED_CONVERSATION

    user_id
    這是遠端系統傳送的 EBCDIC user_id

    lu_alias
    提供的參數。 本機 LU 別名。 必須提供 才能註冊附加管理員。 只有一個附加管理員可以註冊主機整合伺服器子域內的指定本機 LU 別名。 如果已為此lu_alias註冊另一個附加管理員程式,則會傳回下列錯誤:

    primary_rc = AP_STATE_CHECK (0x0002) secondary_rc = AP_LU_ALREADY_REGISTERED (0x0000050A)

    這表示主機整合伺服器無法註冊此附加管理員。

    plu_alias
    傳回的參數。 提供本機 TP 已知夥伴 LU (起始傳入配置) 的別名。 它是 ASCII 字元字串。

    mode_name
    傳回的參數。 提供合作夥伴 TP 中 MC_ALLOCATEALLOCATE 所指定的模式名稱。 這是組態期間定義的一組網路特性名稱。 mode_name是 EBCDIC 字元字串類型。

    reserv3
    保留參數。

    conv_group_id
    交談群組標識碼。

    fqplu_name
    這個傳回的參數會提供完整的 LU 名稱。

    pip_incoming
    提供的參數。 如果此附加管理員將接受包含 PIP 資料的傳入 FMH-5 附加,請將此設定為 AP_YES。 否則,請將此值設定為 AP_NO

    傳回的參數:如果傳入附加中存在 PIP 數據,則這會設定為 AP_YES。 如果沒有 PIP 數據存在,這將會設定為 AP_NO

    timeout
    逾時,以秒為單位。 0xFFFFFFFF的值可以用來永遠等候。

    password
    傳回的參數:這是遠端系統傳送的 EBCDIC 密碼。 如果遠端系統支援「密碼替代」(密碼加密),則會在 RECEIVE_ALLOCATE_EX收到加密的密碼。 沒有可解密此密碼的設施,因此應用程式將無法驗證用戶認證。

    reserv5
    保留參數。

    attach_id
    傳回的參數。 一律設定為 0。 此欄位是針對與非Microsoft SNA 產品的來源相容性所定義。

備註

主機整合伺服器支援APPC RECEIVE_ALLOCATE_EXRECEIVE_ALLOCATE_EX_END ,以簡化某些可叫用交易程式的設計和實作。 此函式可讓 APPC 應用程式接收主機整合伺服器透過特定本機 APPC LU 接收的所有傳入 FMH-5 附加要求,讓應用程式能夠作為「附加管理員」。附加管理員是處理傳入 FMH-5 附加要求以啟動 LU6.2 交談的程式。 當 APPC 應用程式呼叫 RECEIVE_ALLOCATE 時(而不是 RECEIVE_ALLOCATE_EX),主機整合伺服器會處理附加管理員功能。 若要在APPC應用程式中實作附加管理員功能,會發生下列情況:

  • 應用程式會提供本機 APPC LU 別名給 RECEIVE_ALLOCATE_EX 函式,並具有 EBCDIC 空格的tp_name(十六進位 X'40')。

  • 當主機整合伺服器使用該本機 APPC LU 透過 LU6.2 工作階段收到傳入 FMH-5 附加要求時,主機整合伺服器會將要求路由傳送至應用程式。

  • 當RECEIVE_ALLOCATE_EX完成時,應用程式會負責下列事項:

    1. 接受或拒絕 FMH-5 附加

    2. 驗證任何交談層級安全性,以及

    3. 如果接受附加要求,請完全處理其 Win32 進程內容中的要求。

  • 若要停止接聽新的連入附加要求,應用程式會 呼叫RECEIVE_ALLOCATE_EX_END

  • RECEIVE_ALLOCATE_EX 處理問題之後,進程不應該以特定 TP 名稱呼叫 RECEIVE_ALLOCATE 。 同樣地,如果進程 呼叫RECEIVE_ALLOCATE,該程式不應該稍後呼叫 RECEIVE_ALLOCATE_EX。 換句話說,在支援可叫用 TP 的進程期間,進程應該只呼叫 RECEIVE_ALLOCATERECEIVE_ALLOCATE_EX,但不能同時呼叫這兩者。

    應用程式無法將連入附加要求分派至另一個進程,因為交談標識碼只在自己的應用程式內容中有效。

備註

:主機整合伺服器不支援自動啟動附加管理員應用程式。 換句話說,如果應用程式呼叫 RECEIVE_ALLOCATE_EX,則必須先啟動應用程式,才能在任何傳入的 Attach 要求透過本機 LU 抵達之前。

目前的規格不會傳回 FMH-5 附加的安全性指標(FMH-5 附加的位元組 4)。 因此,應用程式必須容納包含下列專案的連入附加要求:

  1. user_id或密碼都沒有 (當附加中未傳送任何安全性時),

  2. 僅限user_id(例如「已驗證」附加專案),或

  3. user_id和密碼(如果需要用戶授權)。

    在 LU6.2 BIND 要求中,主機整合伺服器表示支援內送 FMH-5 附加要求,這些要求包含使用者安全性、已驗證和密碼替代。 主機整合伺服器不支援要求持續驗證的連入附加。

    如果tp_name設定為所有 EBCDIC 空格(X'40'),且本機 LU 別名是在 [lu_alias] 字段中提供, 則RECEIVE_ALLOCATE_EX 函式可讓應用程式註冊為附加管理員。 註冊為指定lu_alias的附加管理員時,主機整合伺服器會將透過lu_alias接收的所有連入連結路由傳送至應用程式。 如需主機整合伺服器如何路由傳入 FMH-5 附加要求的詳細資訊,請參閱下文。

    應用程式可以多次呼叫 RECEIVE_ALLOCATE_EX ,以註冊為一或多個Local LU的附加管理員。 不過,在 SNA 子域內的指定lu_alias上只能註冊一個附加管理員(也就是說,在所有主機整合伺服器和附加的主機整合伺服器用戶端上)。 應用程式無法提供空白tp_name和空白lu_alias。 換句話說,應用程式無法註冊為預設附加管理員,以接收 SNA 子域的所有連入附加要求。

    RECEIVE_ALLOCATE_EX完成時,應用程式會負責下列事項:

  • 決定是否接受附加。 主機整合伺服器不提供設定交易程式 (TP) 的機制。 應用程式必須有自己的方法來定義支援哪個 tp 名稱。

  • 如果已接受,應用程式必須驗證交談安全性屬性(user_id、密碼),以及處理新交談的處理。

  • 無法將tp_id和conv_id傳遞至個別的程序進行處理。 所有 TP 處理都必須由應用程式提供。

    如果應用程式選擇拒絕附加要求,則必須呼叫 [MC_]DEALLOCATE ,並 指定在已完成RECEIVE_ALLOCATE_EX中收到的conv_id,以及dealloc_type參數中適當的原因碼,使用這些新的擴充程式代碼:

    #define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_EXPIRED 0x10

    #define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_INVALID 0x11

    #define AP_DEALLOC_SECURITY_NOT_VALID_USERID_REVOKED 0x12

    #define AP_DEALLOC_SECURITY_NOT_VALID_USERID_INVALID 0x13

    #define AP_DEALLOC_SECURITY_NOT_VALID_USERID_MISSING 0x14

    #define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_MISSING 0x15

    #define AP_DEALLOC_SECURITY_NOT_VALID_GROUP_INVALID 0x16

    #define AP_DEALLOC_SECURITY_NOT_VALID_USERID_REVOKED_IN_GROUP 0x17

    #define AP_DEALLOC_SECURITY_NOT_VALID_USERID_NOT_DEFD_TO_GROUP 0x18

    #define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_AT_REMOTE_LU 0x19

    #define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_FROM_LOCAL_LU 0x1A

    #define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_TO_TRANSACTION_PROGRAM 0x1B

    #define AP_DEALLOC_SECURITY_NOT_VALID_INSTALLATION_EXIT_FAILED 0x1C

    #define AP_DEALLOC_SECURITY_NOT_VALID_PROCESSING_FAILURE 0x1D

    #define AP_DEALLOC_SECURITY_NOT_VALID_PROTOCOL_VIOLATION 0x1E

    當應用程式設定上述dealloc_type時,主機整合伺服器會在拒絕 FMH-5 附加要求時,傳送傳送至遠端系統之 FMH-7 錯誤的對應感知碼:

    #define AP_SECURITY_NOT_VALID_PASSWORD_EXPIRED APPC_FLIPL(x080fff00)

    #define AP_SECURITY_NOT_VALID_PASSWORD_INVALID APPC_FLIPL(x080fff01)

    #define AP_SECURITY_NOT_VALID_USERID_REVOKED APPC_FLIPL(x080fff02)

    #define AP_SECURITY_NOT_VALID_USERID_INVALID APPC_FLIPL(x080fff03)

    #define AP_SECURITY_NOT_VALID_USERID_MISSING APPC_FLIPL(x080fff04)

    #define AP_SECURITY_NOT_VALID_PASSWORD_MISSING APPC_FLIPL(x080fff05)

    #define AP_SECURITY_NOT_VALID_GROUP_INVALID APPC_FLIPL(x080fff06)

    #define AP_SECURITY_NOT_VALID_USERID_REVOKED_IN_GROUP APPC_FLIPL(x080fff07)

    #define AP_SECURITY_NOT_VALID_USERID_NOT_DEFD_TO_GROUP APPC_FLIPL(x080fff08)

    #define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_AT_REMOTE_LU APPC_FLIPL(x080fff09)

    #define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_FROM_LOCAL_LU APPC_FLIPL(x080fff0A)

    #define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_TO_TRANSACTION_PROGRAM APPC_FLIPL(x080fff0B)

    #define AP_SECURITY_NOT_VALID_INSTALLATION_EXIT_FAILED APPC_FLIPL(x080fff0C)

    #define AP_SECURITY_NOT_VALID_PROCESSING_FAILURE APPC_FLIPL(x080fff0D)

    #define AP_SECURITY_NOT_VALID_PROTOCOL_VIOLATION APPC_FLIPL(x080fff0E)

    在呼叫 RECEIVE_ALLOCATE_EX之前,應用程式可能想要驗證本機 APPC LU 的組態設定,以判斷 LU 是否支援同步層級 2,或是預設 LU 集區的成員。 若要這樣做,請使用增強 GET_LU_STATUS API。

    若要取消註冊為指定本機 APPC LU 的附加管理員,應用程式必須呼叫 RECEIVE_ALLOCATE_EX_END,如下所述。 如果應用程式已註冊為多個lu_alias的附加管理員,則必須為每個lu_alias呼叫 RECEIVE_ALLOCATE_EX_END

    應用程式應該嘗試隨時有RECEIVE_ALLOCATE_EX擱 ,以便及時處理傳入的附加要求。 如果應用程式無法張貼新的 RECEIVE_ALLOCATE_EX,主機整合伺服器會排入最多 2,048 個連入附加至應用程式、如果應用程式是在主機整合伺服器上執行,或在 HIS 用戶端上執行,則為 256。 如果超過限制,主機整合伺服器會拒絕具有感知碼 X'084B6031' 或 AP_TRANS_PGM_NOT_AVAIL_RETRY的附加要求。