OBject EXchange

OBject EXchange

OBEX(OBject EXchange의 약칭, IraOBEX라고도 함)는 기기 간 이진 물체의 교환을 용이하게 하는 통신 프로토콜이다. 적외선 데이터 협회에 의해 유지되지만, 블루투스 특수 이익 그룹과 OMA(Open Mobile Alliance)의 SyncML 윙에서도 채택되었다. OBEX의 가장 초기 인기 어플리케이션 중 하나는 팜 III에 있었다.PDA와 많은 후계자들은 OBEX를 사용하여 명함, 데이터, 심지어 응용 프로그램까지 교환한다.

OBEX는 처음에는 적외선용으로 설계되었지만, 현재는 블루투스에 의해 채택되었고, 또한 RS-232, USB, WAP를 통해서 그리고 Livescribe 스마트펜스와 같은 장치에서도 사용된다.

HTTP와 비교

OBEX는 클라이언트에 서버 연결을 위한 신뢰할 수 있는 전송을 제공하는 데 있어 HTTP와 설계 및 기능이 유사하며, 그런 다음 객체를 요청하거나 제공할 수 있다. 그러나 OBEX는 많은 중요한 측면에서 다르다.

  • HTTP는 일반적으로 TCP/IP 링크 위에 계층화된다. OBEX는 IrDA 장치의 IrLAP/IrLMP/Tiny TP 스택에서도 일반적으로 구현될 수 있다. Bluetooth에서 OBEX는 Baseband/ACL/L2CAP(기존 용도 및 RFCOMM) 스택에서 구현된다. USB를 통한 것과 같은 OBEX의 다른 "빈딩"도 가능하다.
  • HTTP는 사람이 읽을 수 있는 텍스트를 사용하지만, OBEX는 요청이나 개체에 대한 정보를 교환하기 위해 "헤더"라는 이름의 이진 형식 타입-길이-값 트리플릿을 사용한다. 이것들은 자원이 제한된 장치로 구문 분석하기가 훨씬 쉽다.
  • HTTP 트랜잭션은 본질적으로 상태 비저장이다. 일반적으로 HTTP 클라이언트는 연결을 열고, 단일 요청을 하고, 응답을 수신하며, 연결을 종료하거나 관련 없는 다른 요청을 한다. OBEX에서 단일 전송 연결에는 많은 관련 작업이 포함될 수 있다. 실제로 최근 OBEX 규격에 추가된 사항으로 인해 모든 상태 정보가 그대로 유지된 상태에서 갑자기 종료된 트랜잭션을 재개할 수 있다.

물건들

OBEX는 연결 매개변수 설정, 데이터 전송 및 요청, 현재 경로 또는 파일의 속성 변경 등 다양한 용도로 사용되는 객체를 교환하여 작동한다.

개체는 필드헤더. 예를 들면, 휴대 전화의 전화번호부를 요청하는 데 사용되는 물체는 다음과 같다.

오브젝트 필드 명령 GET, 파이널 0x83
길이 물체의 총 길이 0x00 0x29
머리글 연결 ID 1 0xCB 0x00 0x00 0x00 0x01
이름 "csv/pb.vcf" 0x01 0x00 0x1e 0x00 0x74 0x00 0x65 0x00 0x6c 0x00 0x65 0x00 0x63 0x00 0x6f 0x00 0x6d 0x00 0x2f 0x00 0x70 0x00 0x62 0x00 0x2e 0x00 0x76 0x00 0x63 0x00 0x66 0x00 0x00

이 개체에는 두 개의 필드(명령 및 길이)와 두 개의 헤더가 있다. 첫 번째 필드(명령)는 데이터에 대한 요청(GET)임을 지정한다. 두 번째 필드는 두 필드를 포함하여 개체의 전체 크기입니다.

이 개체에는 두 개의 헤더, 특히 "연결 ID"와 "이름"도 포함되어 있다. 각 헤더의 첫 번째 바이트는 헤더의 이름과 내용 유형이다. 이 경우:

  • 0xCB는 이 헤더가 이전에 얻은 번호인 "연결 ID"라는 것을 의미한다. 0xCB의 두 개의 최고 순서 비트는 11이며, 이 쌍은 이것을 4바이트 양으로 지정한다.
  • 두 번째 헤더의 첫 번째 바이트는 0x01이고, 이 바이트는 이 헤더를 "이름"으로 식별하며, 0x01의 처음 두 비트는 00이며, 이는 헤더의 내용이 (0x00 0x1e)로 만들어진 바이트 수로 접두사되는 무효 유니코드 문자열이라는 것을 의미한다.

요청된 데이터를 포함하는 가능한 응답은 다음과 같을 수 있다.

반응 필드 응답코드 OK, Final 0xA0
길이 물체의 총 길이 0x00 0x35
머리글 엔드오바디 "베긴:VCARD..." 0x49 0x00 0x00 0x2F 0x42 0x45 0x47 0x49 0x4e 0x3a 0x56 0x43 0x41 0x52 0x44

이 예에서 전화번호부는 단일 응답 대상에 포함될 정도로 짧은 것으로 가정한다. 유일한 헤더에는 식별자로 0x49가 있으며, 이는 마지막 정보 덩어리(이 경우 유일한 헤더)인 "신체의 끝"이라는 것을 의미한다. 0x49의 처음 두 비트는 01이며, 이는 이 헤더의 내용이 길이 접두사 데이터라는 것을 의미한다: 다음 두 바이트 0x00 0x2F는 이 데이터의 길이를 알려준다(십진수, 47), 다음 바이트는 데이터다, 이 경우 47바이트의 빈 vCard만 구성된 전화번호부.

이 예에서는 단일 GET 명령과 그 응답을 보여 주며, 연결 ID, 이름 및 본문 끝과 관련된 유일한 헤더는 다음과 같다. 발급하기 전에 연결 ID를 포함한 연결의 일부 매개변수를 설정하기 위해 CONNECT 명령을 전송해야 한다. 다른 명령: put, setpath, action, abort, disconnect. 다른 주목할 만한 헤더로는 유형, 시간, 설명, 대상 등이 있다.

세션

클라이언트(예: 컴퓨터)가 서버에 접속한 후(예: 모바일) 일반적인 세션은 클라이언트에서 여러 개의 객체를 전송하고 서버로부터 응답을 받는 것으로 구성된다. 예를 들면 다음과 같다.

  • CONNECT: 필드 중 하나는 클라이언트가 받을 수 있는 가장 큰 패킷 크기를 지정하고, TARGET 헤더는 클라이언트가 기대하는 서비스 종류(파일 검색, 동기화-ml, 전화번호부 액세스)를 지정하며, 서버는 최대 패킷 길이, 연결 ID 및 기타 데이터를 사용하여 응답한다.
  • GET: 클라이언트는 연결 ID, 파일 이름 및/또는 그 유형을 지정하여 파일을 요청하고, 서버는 파일 콘텐츠로 응답하거나 일부만 응답하며, 후자의 경우 클라이언트는 파일의 나머지를 얻기 위해 다른 GET 개체를 전송해야 함
  • SETPATH: 클라이언트는 서버에 연결 ID와 폴더 이름을 두 헤더에 지정하여 다른 파일 폴더로 전환하도록 지시
  • GET: 클라이언트는 연결 ID와 적절한 TYPE 헤더를 가진 객체를 전송하여 폴더 컨텐츠 목록을 요청(예: 파일 전송을 위한 "x-obex/folder listing", 전화번호부 액세스를 위한 "x-bt/vcard listing")
  • PUT: 클라이언트는 서버로 파일을 전송한다. 파일이 너무 커서 단일 패킷에 맞지 않으면 서버는 다음 부분을 계속 응답하여 요청한다.
  • 연결 끊기: 클라이언트가 세션을 닫는 서버에 통지

서비스에 따라 교환이 크게 달라질 수 있다. 예를 들어 SyncML은 SETPATH를 사용하지 않고 OBEX 푸시는 CONNECT(대상 헤더 없음), PUT 및 선택적 DISCONNECT로 이루어진다.

프로토콜

다음 프로토콜은 OBEX를 통해 실행되거나 바인딩이 있다.

OBEX 푸시
요청의 발신자에서 수신자에게 파일을 전송한다. 대상을 포함하지 않는 CONNECT 객체가 전송된 다음, PUT를 사용하여 파일을 전송한다.
OBEX 파일 전송 프로토콜
FTP와 유사한 파일 저장 및 검색 The target header of the CONNECTION object is {0xF9, 0xEC, 0x7B, 0xC4, 0x95, 0x3C, 0x11, 0xD2, 0x98, 0x4E, 0x52, 0x54, 0x00, 0xDC, 0x9E, 0x09}; the response contains the connection id to use in subsequent GET, PUT, SETPATH and ACTION object.
전화번호부 액세스
Similar to file transfer, but uses a target {0x79, 0x61, 0x35, 0xF0, 0xF0, 0xC5, 0x11, 0xD8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66}; phonebook entries can be listed (with various possible orderings and filters) and retrieved from certain directories under telecom/ using GET and SETPATH
IrMC
IrMC는 전화번호부 항목, 캘린더 항목, 디지털 명함 및 작업관리 목록 교환을 위해 설계되었다. 연결되지 않은 형태에서 단일 PUT를 사용하여 데이터를 전송한다. 그렇지 않으면 통신 내의 다양한 파일 및 폴더를 검색하거나 푸시할 수 있다. 대상 헤더 {'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'는 GET 요청에 사용하여 사용된 인덱싱의 종류를 구별할 수 있다.
Sync
SyncML은 전화번호부, 달력, 노트 및 기타 데이터를 동기화할 수 있다. In its OBEX binding, the target of the CONNECT object is {'S', 'Y', 'N', 'C', 'M', 'L', '-', 'S', 'Y', 'N', 'C'}; a session then consists in a sequence of PUT-GET pairs where nameless XML or WBXML files are sent and received, in turn.

구현

자바스.오벡스

Bluetooth용 Java APIs의 옵션 패키지 Javax.obex는 Java에서 OBEX의 구현을 제공한다.[1]

오픈오벡스

OpenObex는 OBEX in C의 오픈 소스 구현이다. IrDA, Bluetooth, USBTCP/IP를 통해 연결, 객체 구축 및 수신 데이터 처리 기능을 제공한다. 클라이언트 애플리케이션의 스키마 예:

공허하게 하다 콜백_기능(...) {   /* 받은 데이터 처리 */ }  인트로 본래의() {   OBEX_Init(..., 콜백_기능);   OBEX_TransportConnect(...);    반대하다 = OBEX_ObjectNew(...);   OBEX_ObjectAdd헤더(반대하다, ...);   OBEX_ObjectAdd헤더(반대하다, ...);   OBEX_Request(..., 반대하다);   하는 동안에 (...)     OBEX_HandleInput(...)    반대하다 = OBEX_ObjectNew(...);   OBEX_ObjectAdd헤더(반대하다, ...);   OBEX_Request(..., 반대하다);   하는 동안에 (...)     OBEX_HandleInput(...)    /* ... */    OBEX_TransportDisconnect(다루다);   OBEX_Cleanup(다루다); } 

객체가 전송되는 위치 OBEX_Request. 전화후 OBEX_HandleInput, 수신된 데이터는 콜백 함수에서 처리됨(호출 시 지정됨) OBEX_Init콜백 함수는 응답이 완전히 수신되었는지, 따라서 메인 프로그램이 에서 나갈 수 있는지 여부를 판단할 수 있다. while 실행 중임

PyOBEX 및 nOBEX

PyOBEX는 Python에서 OBEX에 대한 부분적인 지원을 제공하며,[2] nOBEX는 보다 완벽한 OBEX 지원을 제공하는 PyOBEX의 포크로, 자동차 인포테인먼트 시스템에서 OBEX 테스트를 용이하게 할 수 있도록 블루투스 핸즈프리 프로파일을 지원한다.[3]

프로필

OBEX는 많은 상위 계층 "프로파일"의 기초가 된다.

프로필
분류 프로필
IrDA 포인트 및 슈팅 프로필
적외선 금융 메시징(IrFM) 프로필
블루투스 SIG 일반 개체 교환 프로필
개체 푸시 프로파일(전화에서 전화로의 전송)
파일 전송 프로필(전화에서 PC로 전송)
동기화 프로필
기본 이미징 프로파일
기본 인쇄 프로필
OMA SyncML 바인딩

지원되는 장치

  • Palm Pre, Palm Pre Plus, Palm Pixi 및 Palm Pixi Plus를 제외한 All Palm III 이후.
  • Most Sharp, Motorola, 삼성, 소니 에릭슨, HTC노키아 전화기(적외선 또는 블루투스 포트 포함)
  • LG EnV 터치(VX11000)
  • 2003년 이후 많은 PDA
  • 적외선 또는 Bluetooth 포트가 있는 다른 많은 전화기
  • 버전 2.1 이상의 Android 장치
  • Windows Phone 7.8 및 8 기기('블루투스 공유' 앱을 통해 사진, 음악 및 비디오를 전송하는 것에 한함).

참고 항목

참조

외부 링크