43:
465:
This example shows a single GET command and its response, the only headers involved being connection id, name and end-of-body. Before issuing it, a CONNECT command should have been sent for establishing some parameters of the connection, including the connection id. Other commands are: put, setpath,
457:
In this example, the phonebook is assumed short enough to be contained in a single response object. The only header has 0x49 as its identifier, meaning that it is an "End of Body", the last chunk of information (also the only one, in this case). The first two bits of 0x49 are 01, meaning that the
540:
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
554:. In its connectionless form, a single PUT is used to transfer data; otherwise, various files and folders within telecom/ can be retrieved or pushed; a target header {'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'} may be used in GET requests to differentiate the kind of indexing used
479:
CONNECT: one of the fields specifies the largest size of packets the client can receive; a TARGET header specifies the kind of service the client is expecting (file-browsing, sync-ml, phonebook access); the server answer with its maximal packet length, the connection id, and other
563:
can synchronize phonebooks, calendars, notes, and other data. 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
534:. 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.
483:
GET: the client requests a file, specifying the connection id, the file name and/or its type; the server answer with the file content, or just a part of it; in the latter case, the client has to send other GET objects to obtain the rest of the
374:
This object contains two fields (command and length) and two headers. The first field (command) specifies that it is a request for data (GET). The second field is the total size of the object, including the two fields.
490:
GET: the client requests a listing of the folder content by sending an object with the connection id and an appropriate TYPE header (e.g., "x-obex/folder-listing" for file transfer, "x-bt/vcard-listing" for phonebook
275:. In OBEX, a single transport connection may bear many related operations. In fact, recent additions to the OBEX specification allow an abruptly closed transaction to be resumed with all state information intact.
385:
the first byte of the second header is 0x01; this byte identifies this header as a "Name" one; the first two bits of 0x01 are 00, meaning that the content of this header is a null-terminated unicode string (in
458:
content of this header is length-prefixed data: the two next bytes 0x00 0x2F tells the length of this data (in decimal, 47), the succeeding ones are the data, in this case a phonebook comprising only an empty
474:
After the client (e.g., computer) connects to the server (e.g., mobile), a typical session consists in the client sending a number of objects and getting their responses from the server. As an example:
382:
0xCB means that this header is a "Connection ID", a number obtained previously; the two highest-order bits of 0xCB are 11, and this pair specifies that this as a 4-byte quantity;
288:, which are used for a variety of purposes: establishing the parameters of a connection, sending and requesting data, changing the current path or the attributes of a file.
271:
HTTP transactions are inherently stateless; generally an HTTP client opens a connection, makes a single request, receives its response, and either closes the connection or
378:
This object also contains two headers, specifically a "Connection ID" and a "Name". The first byte of each header is the header's name and its content type. In this case:
213:
in providing the client with a reliable transport for connecting to a server and may then request or provide objects. But OBEX differs in many important respects:
524:
Transfers a file from the originator of the request to the recipient; a CONNECTION object containing no target is sent, then PUT is used to transfer the file
494:
PUT: the client sends a file to the server; if it is too large to fit into a single packet, the server will request the next part with a CONTINUE response
367:
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
836:). The callback function can determine whether the response has been completely received, and therefore whether the main program can exit from the
250:
487:
SETPATH: the client tells the server to switch to a different file folder, specifying the connection id and the folder name in two headers
268:
triplets named "Headers" to exchange information about a request or an object. These are much easier to parse by resource-limited devices.
506:
246:
254:
900:
853:
107:
79:
923:
1028:
Windows Phone 7.8 and 8 devices (limited to the transferring of pictures, music and videos via a 'Bluetooth Share' app).
937:
1126:
930:
915:
86:
1062:
907:
126:
159:
60:
93:
64:
194:
75:
1104:
849:
1043:
272:
175:
1110:
591:
265:
155:
299:. As an example, the following may be the object used for requesting the phonebook from a mobile:
550:
was designed for the exchange of phonebook entries, calendar entries, digital business cards, and
587:
53:
466:
action, abort, disconnect. Some other notable headers include: type, time, description, target.
603:
151:
622:, building objects and handling received data. An example schema of a client application is:
100:
852:. nOBEX is a fork of PyOBEX with more complete OBEX support, and support for the Bluetooth
167:
17:
8:
1107:, including specifications for OBEX and OBEX-based protocols (GOEP, FTP, OBEX push, SYNC)
154:
that facilitates the exchange of binary objects between devices. It is maintained by the
832:, received data is processed in the callback function (which was specified when calling
1131:
1038:
178:
and its many successors use OBEX to exchange business cards, data, even applications.
974:
30:
This article is about the communications protocol. For the portion of the brain, see
509:
is made of just CONNECT (without a TARGET header), PUT and an optional DISCONNECT.
990:
181:
Although OBEX was initially designed for infrared, it has now been adopted by
1120:
986:
501:
The exchange may differ significantly depending on the service. For example,
497:
DISCONNECT: the client informs the server that it is closing the session
963:
551:
198:
171:
1073:
1019:
1002:
611:
238:
182:
1084:
42:
1015:
998:
978:
970:, except the Palm Pre, Palm Pre Plus, Palm Pixi and Palm Pixi Plus.
967:
517:
The following protocols runs over OBEX, or have bindings to do so:
242:
257:) stack. Other such "bindings" of OBEX are possible, such as over
982:
390:
form), prefixed by the number of bytes it is made of (0x00 0x1e).
230:
947:
856:
to facilitate OBEX testing on automotive infotainment systems.
619:
560:
502:
218:
186:
163:
394:
A possible response, containing the requested data, could be:
264:
HTTP uses human-readable text, but OBEX uses binary-formatted
170:(OMA). One of OBEX's earliest popular applications was in the
994:
569:
459:
387:
226:
222:
889:
607:
547:
234:
210:
31:
221:
link. OBEX can also be, but is commonly implemented on an
864:
OBEX is the foundation for many higher-layer "profiles":
615:
565:
531:
258:
190:
1099:
450:
0x42 0x45 0x47 0x49 0x4e 0x3a 0x56 0x43 0x41 0x52 0x44
602:
OpenObex is an open-source implementation of OBEX in
67:. Unsourced material may be challenged and removed.
1113:an open source implementation of the OBEX protocol
1118:
848:PyOBEX provides partial support for OBEX in
606:. It provides functions for connecting over
209:OBEX is similar in design and function to
127:Learn how and when to remove this message
1025:Android devices in version 2.1 and above
530:Stores and retrieves files, similar to
14:
1119:
590:provides an implementation of OBEX in
572:files are sent and received, in turn.
204:
956:
65:adding citations to reliable sources
36:
890:Infrared Financial Messaging (IrFM)
843:
24:
576:
25:
1143:
1093:
217:HTTP is normally layered above a
158:but has also been adopted by the
160:Bluetooth Special Interest Group
41:
901:Generic Object Exchange Profile
586:Optional package javax.obex in
505:does not use SETPATH, while an
52:needs additional citations for
1100:OBEX specification at IrDA.org
1078:
1067:
1056:
273:makes other unrelated requests
13:
1:
1049:
581:
512:
7:
1032:
910:(phone to phone transfers)
859:
639:/* process received data */
597:
527:OBEX File Transfer Protocol
241:, OBEX is implemented on a
10:
1148:
1044:List of Bluetooth profiles
1011:Many other PDAs since 2003
469:
279:
29:
1127:Infrared Data Association
896:
880:
431:
402:
399:
334:
307:
304:
284:OBEX works by exchanging
156:Infrared Data Association
918:(phone to PC transfers)
884:Point and Shoot profile
795:OBEX_TransportDisconnect
624:
185:, and is also used over
1014:Many other phones with
924:Synchronization Profile
588:Java APIs for Bluetooth
422:total length of object
325:total length of object
253:(and, for legacy uses,
197:and in devices such as
1008:LG EnV Touch (VX11000)
938:Basic Printing Profile
840:loop it is executing.
152:communication protocol
27:Communication protocol
931:Basic Imaging Profile
916:File Transfer Profile
669:OBEX_TransportConnect
824:Objects are sent by
753:OBEX_ObjectAddHeader
702:OBEX_ObjectAddHeader
687:OBEX_ObjectAddHeader
168:Open Mobile Alliance
61:improve this article
908:Object Push Profile
869:
348:0x00 0x00 0x00 0x01
1105:Bluetooth profiles
1039:Shared file access
867:
854:Hands Free Profile
205:Comparison to HTTP
957:Supported devices
954:
953:
663:callback_function
630:callback_function
455:
454:
372:
371:
357:"telecom/pb.vcf"
266:type–length–value
142:(abbreviation of
137:
136:
129:
111:
76:"OBject EXchange"
16:(Redirected from
1139:
1087:
1082:
1076:
1071:
1065:
1060:
870:
866:
844:PyOBEX and nOBEX
839:
835:
831:
830:OBEX_HandleInput
828:. After calling
827:
820:
817:
814:
811:
808:
805:
802:
799:
796:
793:
790:
787:
786:OBEX_HandleInput
784:
781:
778:
775:
772:
769:
766:
763:
760:
757:
754:
751:
748:
745:
742:
739:
736:
735:OBEX_HandleInput
733:
730:
727:
724:
721:
718:
715:
712:
709:
706:
703:
700:
697:
694:
691:
688:
685:
682:
679:
676:
673:
670:
667:
664:
661:
658:
655:
652:
649:
646:
643:
640:
637:
634:
631:
628:
537:Phonebook Access
451:
440:
439:"BEGIN:VCARD..."
427:
414:
397:
396:
368:
349:
330:
302:
301:
132:
125:
121:
118:
112:
110:
69:
45:
37:
21:
1147:
1146:
1142:
1141:
1140:
1138:
1137:
1136:
1117:
1116:
1096:
1091:
1090:
1083:
1079:
1072:
1068:
1061:
1057:
1052:
1035:
959:
873:Classification
862:
846:
837:
833:
829:
825:
822:
821:
818:
815:
812:
809:
806:
803:
800:
797:
794:
791:
788:
785:
782:
779:
776:
773:
770:
767:
764:
761:
758:
755:
752:
749:
746:
743:
740:
737:
734:
731:
728:
725:
722:
719:
716:
713:
710:
707:
704:
701:
698:
695:
692:
689:
686:
683:
680:
677:
674:
671:
668:
665:
662:
659:
656:
653:
650:
647:
644:
641:
638:
635:
632:
629:
626:
600:
584:
579:
577:Implementations
515:
472:
443:
438:
425:
412:
360:
344:
328:
282:
207:
144:OBject EXchange
133:
122:
116:
113:
70:
68:
58:
46:
35:
28:
23:
22:
15:
12:
11:
5:
1145:
1135:
1134:
1129:
1115:
1114:
1108:
1102:
1095:
1094:External links
1092:
1089:
1088:
1077:
1066:
1063:javax.obex API
1054:
1053:
1051:
1048:
1047:
1046:
1041:
1034:
1031:
1030:
1029:
1026:
1023:
1012:
1009:
1006:
971:
958:
955:
952:
951:
945:
941:
940:
934:
933:
927:
926:
920:
919:
912:
911:
904:
903:
898:
897:Bluetooth SIG
894:
893:
886:
885:
882:
878:
877:
874:
861:
858:
845:
842:
747:OBEX_ObjectNew
681:OBEX_ObjectNew
625:
599:
596:
583:
580:
578:
575:
574:
573:
558:
555:
545:
542:
538:
535:
528:
525:
522:
514:
511:
499:
498:
495:
492:
488:
485:
481:
471:
468:
453:
452:
441:
436:
433:
429:
428:
423:
420:
416:
415:
410:
407:
406:Response code
404:
401:
392:
391:
383:
370:
369:
358:
355:
351:
350:
342:
339:
338:Connection ID
336:
332:
331:
326:
323:
319:
318:
315:
312:
309:
306:
281:
278:
277:
276:
269:
262:
206:
203:
146:, also termed
135:
134:
117:September 2014
49:
47:
40:
26:
9:
6:
4:
3:
2:
1144:
1133:
1130:
1128:
1125:
1124:
1122:
1112:
1109:
1106:
1103:
1101:
1098:
1097:
1086:
1081:
1075:
1070:
1064:
1059:
1055:
1045:
1042:
1040:
1037:
1036:
1027:
1024:
1021:
1017:
1013:
1010:
1007:
1004:
1000:
996:
992:
988:
987:Sony Ericsson
984:
980:
976:
972:
969:
965:
961:
960:
949:
946:
943:
942:
939:
936:
935:
932:
929:
928:
925:
922:
921:
917:
914:
913:
909:
906:
905:
902:
899:
895:
891:
888:
887:
883:
879:
875:
872:
871:
865:
857:
855:
851:
841:
623:
621:
617:
613:
609:
605:
595:
593:
589:
571:
567:
562:
559:
556:
553:
549:
546:
543:
539:
536:
533:
529:
526:
523:
520:
519:
518:
510:
508:
504:
496:
493:
489:
486:
482:
478:
477:
476:
467:
463:
462:of 47 bytes.
461:
449:
446:
442:
437:
434:
430:
424:
421:
418:
417:
411:
408:
405:
398:
395:
389:
384:
381:
380:
379:
376:
366:
363:
359:
356:
353:
352:
347:
343:
340:
337:
333:
327:
324:
321:
320:
316:
313:
310:
303:
300:
298:
294:
289:
287:
274:
270:
267:
263:
260:
256:
252:
248:
244:
240:
236:
232:
228:
224:
220:
216:
215:
214:
212:
202:
200:
196:
192:
188:
184:
179:
177:
173:
169:
165:
161:
157:
153:
149:
145:
141:
131:
128:
120:
109:
106:
102:
99:
95:
92:
88:
85:
81:
78: –
77:
73:
72:Find sources:
66:
62:
56:
55:
50:This article
48:
44:
39:
38:
33:
19:
1080:
1069:
1058:
997:phones with
863:
847:
826:OBEX_Request
823:
807:OBEX_Cleanup
768:OBEX_Request
717:OBEX_Request
601:
585:
516:
500:
473:
464:
456:
447:
444:
435:End-of-Body
393:
377:
373:
364:
361:
345:
296:
292:
291:Objects are
290:
285:
283:
233:stack on an
208:
180:
166:wing of the
147:
143:
139:
138:
123:
114:
104:
97:
90:
83:
71:
59:Please help
54:verification
51:
552:to-do lists
314:GET, Final
237:device. In
201:smartpens.
1121:Categories
1050:References
582:javax.obex
409:OK, Final
199:Livescribe
87:newspapers
1132:Bluetooth
1020:Bluetooth
1003:Bluetooth
868:Profiles
834:OBEX_Init
792:/* ... */
657:OBEX_Init
612:Bluetooth
521:OBEX Push
513:Protocols
507:OBEX push
448:0x00 0x2F
426:0x00 0x35
400:Response
365:0x00 0x1e
329:0x00 0x29
239:Bluetooth
183:Bluetooth
1111:OpenOBEX
1033:See also
1016:infrared
999:infrared
979:Motorola
968:Palm III
950:binding
892:profile
876:Profile
860:Profiles
598:OpenObex
432:Headers
335:Headers
311:Command
243:Baseband
172:Palm III
162:and the
983:Samsung
541:SETPATH
491:access)
470:Session
419:Length
403:Fields
322:Length
308:Fields
305:Object
297:headers
286:objects
280:Objects
231:Tiny TP
174:. This
150:) is a
101:scholar
1074:PyOBEX
966:since
948:SyncML
850:Python
813:handle
801:handle
774:object
759:object
750:(...);
741:object
723:object
708:object
693:object
684:(...);
675:object
672:(...);
620:TCP/IP
561:SyncML
557:SyncML
503:SyncML
293:fields
255:RFCOMM
219:TCP/IP
187:RS-232
164:SyncML
148:IrOBEX
103:
96:
89:
82:
74:
1085:nOBEX
995:Nokia
975:Sharp
973:Most
964:Palms
881:IrDA
838:while
789:(...)
783:(...)
780:while
771:(...,
765:...);
738:(...)
732:(...)
729:while
720:(...,
714:...);
699:...);
660:(...,
633:(...)
570:WBXML
460:vCard
388:UCS-2
354:Name
317:0x83
251:L2CAP
227:IrLMP
223:IrLAP
108:JSTOR
94:books
1022:port
1005:port
993:and
962:All
944:OMA
648:main
627:void
618:and
608:IrDA
592:Java
548:IrMC
544:IrMC
484:file
480:data
445:0x49
413:0xA0
362:0x01
346:0xCB
295:and
235:IrDA
211:HTTP
140:OBEX
80:news
32:Obex
18:OBEX
1018:or
1001:or
991:HTC
645:int
616:USB
568:or
566:XML
532:FTP
259:USB
247:ACL
195:WAP
191:USB
176:PDA
63:by
1123::
989:,
985:,
981:,
977:,
816:);
804:);
777:);
726:);
666:);
651:()
614:,
610:,
594:.
341:1
193:,
189:,
819:}
810:(
798:(
762:,
756:(
744:=
711:,
705:(
696:,
690:(
678:=
654:{
642:}
636:{
604:C
261:.
249:/
245:/
229:/
225:/
130:)
124:(
119:)
115:(
105:·
98:·
91:·
84:·
57:.
34:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.