Logo Search packages:      
Sourcecode: yaskkserv version File versions  Download package

bool SkkServer::main_loop_check_buffer ( int  work_index,
int  recv_result,
bool &  illegal_protocol_flag 
) [inline, protected]

バッファをリセットすべきならば真を返します。

偽を返すのは 1 度で recv() しきれなかった場合だけです。

その他不正なプロトコルなどでもバッファはリセットすべきなので、真を返 します。

recv 文字列に '
' を含むにもかかわらず ' ' が存在しない場合は不正な プロトコルとして illegal_protocol_flag を真にします。このとき呼び出 し側では "4" を返すべきです。

Definition at line 663 of file skk_server.hpp.

        {
                bool result = true;
                illegal_protocol_flag = false;

                DEBUG_ASSERT(recv_result > 0);
                DEBUG_ASSERT(recv_result <= MIDASI_SIZE + MIDASI_TERMINATOR_SIZE);

                bool cr_found_flag = false;
                bool space_found_flag = false;
                for (int h = recv_result - 1; h >= 0; --h)
                {
                        int tmp = (work_ + work_index)->read_process_index + h;
                        if (*((work_ + work_index)->read_buffer + tmp) == '\n')
                        {
                                cr_found_flag = true;
                        }
                        if (*((work_ + work_index)->read_buffer + tmp) == ' ')
                        {
                                space_found_flag = true;
                                break;
                        }
                }

                if (!space_found_flag)
                {
                        if (cr_found_flag)
                        {
// '\n' を含むにもかかわらず ' ' が存在しないので不正なプロトコルです。
                                illegal_protocol_flag = true;
                        }
                        else
                        {
// 終端に '\n' も ' ' も存在しないということは recv() で読み切れていな
// いため、バッファをリセットしません。
                                result = false;
                        }
                }

                return result;
        }


Generated by  Doxygen 1.6.0   Back to index