������(�ѱ��װ����б� ��ǻ�Ͱ��а�)
|
||||||||||||||||
1. �ڳ� �������� �ڳ��� ���ͳ� ���� �ٸ� ��ǻ�ͷ� �α�����
�� �� �ְ� �ϴ� ���������̴�.
2. �ڳ� ���ɾ� �ڳ� ���������� ������ Ŭ���̾�Ʈ ���θ� �����ϱ�
���Ͽ� ���� ���ɾ ����Ѵ�. �̷��� ���ɾ�� IAC(interpret
as command)���� ������ ��������.
3. �ڳ� �ɼ� ���� ���� ���� ���¸� �����ϱ� ���� �ɼ��� �ִ�. �� �ɼǵ��� �������� �缳���� �� ������, ������ Ŭ���̾�Ʈ ��� �ʿ����� ������ �� �ִ�. �ɼ��� ��Ȯ�� ������ ������ rpc�� ���� �Ͽ��� �Ѵ�.
�ɼ��� Ŭ���̾�Ʈ�� ���� ��� ���ʿ��� �䱸�� �Ͽ�, �ٸ� �� �ʿ��� �װͿ� �����ϴ� ���·� �����ȴ�. �ɼ��� �䱸�� ����
�� ���ʷ� �ڵ带 ������, ���� ���� ���� ����̴�.
WILL�̳� WONT�� �ɼ��� �䱸�ϴ� ���� �� �ɼ��� ��� �Ǵ� ������� �ʰڴٴ� ���̸�, DO�� DONT�� �������� �ɼ��� ��� �Ǵ� ������� ����� �䱸�ϴ� ���̴�. ���ʿ��� �䱸�� �ϸ� ������ ������ �ؾ� �Ѵ�. �䱸�� ������ ������ ������ ��츸�� �����ϴ�.
SB���ɾ�� �ϳ� �̻��� �ɼ��� �ʿ�� �� �� ���ȴ�. �̳� Ÿ���̳�, �̳��� ũ�� ���� ������ �µ� ���ȴ�. �ڳ� Ŭ���̾�Ʈ�� �ڳ��� �ɼ� ���� ������ ���캸��.
4. �ڳ� Ŭ���̾�Ʈ ���α��� �ҽ��� ���������� ó���ϴ� protocal.c��
�� ���� ��� �Լ��� ���Ե� telnet �ڳ� Ŭ���̾�Ʈ�� �ؾ� �� ���� �⺻������ ������ ����. -�������� stream socket ������ �Ѵ�. ���� ���� �� �ʱ� ���� ������ ������ �����ϴ� ������ �ٸ� stream
socket�� �̿��ϴ� ���α��� ���������� �� �ҽ��� main()���� �Ҹ������� init_system()�Լ���
���캸��. -���Ͽ� read()�� ȣ���ߴµ� ���� �����Ͱ�
���� ��. �� �ܿ��� ���� ��찡 ������ �� ���α�������
���� ��쿡 ������ �Ͼ��. ������ �Ͼ�� ���μ����� ������
������ ������ ���߾� ����.
������ ������ ������ ������ read()�� 0�� �����ϰ� ���� write()�� SIGPIPE �ñ׳��� ���Ѵ�. SIGPIPE �ñ׳��� ����è���μ� ���� ������ ������ ���� �� �� �ִ�.
SIGPIPE �ñ׳��� peer_died()�Լ��� ����Ǿ���.
Peer_died()�Լ��� ������ ������ ������ ���� ���� ó���� �����Ѵ�.
���Ƿ�, ������ ������ �������� write()�� SIGPIPE �ñ׳���
����Ű�� peer_died()�Լ��� ����ȴ�. main_loop() main-loop() �Լ��� �ڳ� Ŭ���̾�Ʈ�� �Ϲ�����
�۾��� �����Ѵ�. �ϳ��� ���ѷ����� �� �Լ��� ���ϰ� ��������
�����, �װ��� �������� ó�� ���� Ű����κ����� �Է��� ó���ϴ�
������ �ݺ��ؼ� ó���Ѵ�.
�츮�� ���Ͽ� �� �����ʹ� ���� write_buf�� ����ȴ�. �� �����ʹ� main_loop()���� select()�ý��� ȣ��� ���Ͽ� ������ �� �� �ִٴ� ���� Ȯ�ε� �ڿ��� write_socket()�Լ��� ���ؼ� ������ ������ �ȴ�. �������� ���� �����ʹ� ���� �����Ͱ� ���� ������ read_socket()�� ���ؼ�, ��� read_buf�� ����ȴ�. read_buf�� ����� �����ʹ� �������� ó���� ���Ͽ� process_protocol() �Լ����� ��������. ǥ3�� �̷��� �������� ó�� ������ ���������� �� ���̴�.
<ǥ3 ������ ó������> ���� ó�� �Լ� �ڳ� ���������� ó���ϴ� �������� �츮�� ����������
���������� ���� ���� �־�� �ϰ�, ���Ͽ��� ������ ������ �Ľ��Ͽ�
�������� ó���� �� ������ read_buf���� �ϳ��� ���ڸ� �о
�ʿ��� �������� �κ��� �����ؾ� �Ѵ�. putc_socket()�� puts_socket()�� write_buf��
������ ����ִ� �Լ��̴�. �̷��� �����Լ����� ���� ���������� ó���ϴ�
�������� �ʿ��� �Լ����̴�. �ڳ� �������� �Ľ� process_protocol()�� read_buf�� ����� ������
�Ľ��Ͽ� �ڳ� ���������� ó���Ѵ�. ��
���⼭ TELCMDS, TELOPTS�� #include �տ���
������ ������ telnet.h�� �ִ� �ڳ� ���ɾ� ���̺��� telcmds��,
�ڳ� �ɼ� ���̺��� telopts�� ����ϱ� ���ؼ��̴�. �ڳ� �ɼ� ó�� process_option()�� IAC+[DO|DONT|WILL|WONT]���� ���۵Ǵ� �ɼ��� ó���ϴ� �Լ��̴�. �ɼ��� ó���ϴµ� �־ ���� ����� ���� �ڳ� �ɼ� ���� ������ ��Ī���̶� ���̴�. �� �� ���� �ɼ��� ���� �� �ְ�, ���� ���� �־�� �Ѵٴ� ���̴�. �̷� ���� �����κ��� ���� �ɼ��� �츮�� ���� �ɼ��� �������� �ƴϸ� �䱸�� �ϴ� ���������� �����ϱⰡ ��ƴ�. �� ó���� �ϱ� ���ؼ� option[]�迭�� �������. options[]�� ������ �ʵ�� �ش� �ɼǿ� ����
�䱸�� �ߴ����� ���θ� �����Ѵ�. option_requested()�� �ش� �ɼ��� �䱸�Ǿ�����
���θ� �Ǵ��Ѵ�. �̰��� '��'�� �����ϸ� �ش� �ɼ��� �䱸�Ǿ��ٴ�
���� �ǹ��Ѵ�. �� �Լ��� �̿��Ͽ� �츮�� �ɼ��� ������ ����
������ option_requestd()�� ȣ���Ͽ� �ɼ� �䱸 ���¸� �����ϰ�,
�ɼ��� �����κ��� ���� ������ �װ��� �䱸���� ���������� ���θ�
option_requested()�� ȣ�������ν� �Ǵ��Ѵ�. �ɼ� ���� ������ ���� ó���� �ɼ��� ����Ǿ��
�� ��쿡�� �� ������ mode�� �����Ѵ�. ECHO�� ����(MODE_ECHO)��
���̳ʸ� ��������� ���� (MODE_INBIN, MODE_OUTBIN) ���� �̷���
������. Mode�� �ٷ�� �Լ��� mode_set() �̴�. ���� ��忡 ����
���Ǵ� arpa/telnet.h�� ���ԵǾ� �ִ�. �츮�� �ٷ�� ���� ���
set_terminal()���� ó���ȴ�. �ڳ� ���������� ���ǿ� ������ �ڳ� Ŭ���̾�Ʈ��
��� �ڳ� �ɼ��� ó���� �� �־�� �Ѵٰ� �Ǿ� �ִ�. �츮�� ��������
�ʴ� �ɼ��̶� ������ �䱸�ϸ� ������ �� �־�� �Ѵ�. Option_ok()��
�ɼ��� ���� �����Ǵ��� ���θ� �Ǵ��Ѵ�. TELOPT_BINARY �ɼ��� 8��Ʈ �������� ó�� ���θ� �����ϴ� �ɼ��̴�. ������ WILL �Ǵ� WONT�� �䱸���� ��쿡�� ������ 8 ��Ʈ ������ ó������ ���θ� ���ϴ� ���̹Ƿ�, �츮�� MODE_INBIN �� 8��Ʈ�� �Ƶ��̰ڴٴ� ��带 �����ؾ� �Ѵ�. TELOPT_BINARY�� DO �Ǵ� DONT�� �䱸�Ѵٸ� �̴� Ŭ���̾�Ʈ�� 8��Ʈ ó�� ������ũ��, Ʋ���̾�Ʈ�� 8��Ʈ�� ����ϰڴٴ� MODE_OUTBIN�� �����ؾ� �Ѵ�. TELOPT_ECHO�� �̳��� Ű����κ����� �Է��� ECHO�ؾ� �ϴ����� �����Ѵ�. ������ ECHO�� �ϰڴٸ� �ö��̾�Ʈ�� ECHO�� ���� ���ƾ��ϰ�, ������ ECHO�� ���� �ʰڴٸ� Ŭ���̾�Ʈ�� ECHO�� �ؾ��Ѵ�. Network Virtual Terminal �ڳ� ���������� Network Virtual Terminal(NVT)�� �����Ѵ�. Ŭ���̾�Ʈ�� �����κ��� ���� NVT�ڵ带 ȭ�� ó���� ���� ������ �ڵ�� �ٲپ�� �ϰ�, ����� Ű����κ��� ���� �Է��� NVT�ڵ�� �ٲپ�� �Ѵ�. �̰��� CR/NL ����, ���� ó�� ���� �����Ѵ�. �츮�� ���α��� �̷��� ó���� set_terminal()���� �̳� ������ ���ؼ� ���Ѵ�. ���� �̰��� NVT�� �Ϻ��� �������� �ʴ´�. �ٸ� ������ �ϱ� ���� ��ŷ�̴�. ���α� ���� �Լ� ���α��� ������ �Լ��δ� peer_died(), do_bye(),
sys_error()�� �ִ�. -close()�� ������ �ݴ´�. Set_terminal()���� �̳��� �� raw ���� �����(������ raw ���� �ƴϴ�). ���� ������� Ű���� ���ͷ�Ʈ ���� �������� �ʴ´�. �츮�� escape character�� �������� �ʱ� ������ ���� do_bye()�� ���� ����ڰ� ���α��� ���� ���� ��ų ���� ����.
5. ������ �ڳ� Ŭ���̾�Ʈ�� �ҽ� �ڳ��� �ɼ��� ������ ���� �����ϴ�. �̷��� ó���� ��� �����ϱ� ���ؼ��� ���α��� ����� ����������. ���⼭�� ������ �ʿ��� �� ���� �ɼǸ� �����ϸ�, �˰����� �����ϰ� �Ͽ� ������ �ڳ� ������ �������� �ʴ´�.
7.��ġ�鼭 �� ���α��� �������� ���ø����̼ǿ��� ���̱�� �ʹ��� ���װ� ����, �������� ������ ����ϴ�. ���� �ڳ� Ŭ���̾�Ʈ ���α����� �����ϱ�� ����ϸ��� �����ȴ�. ���� �������� ������ ���� ���α��� ���忡�� �ٷ�� ����. |