2012-04-30 6 views
5

specifiche Bluetooth FTP dice che ho bisogno di usare il funzionamento ACTION, ecco una pagina http://i47.tinypic.com/2425t2v.pngCome implementare l'operazione ACTION (sposta/rinomina, imposta permessi) in J2ME Bluetooth OBEX?

Ma l'ClentSession fornisce solo GET e PUT operazioni, e nulla di cui javadocs.

ecco come l'operazione di creazione del file sembra, è abbastanza facile

public void create() throws IOException { 
     HeaderSet hs = cs.createHeaderSet(); 
     hs.setHeader(HeaderSet.NAME, file); 
     op = cs.put(hs); 
     OutputStream os = op.openOutputStream(); 
     os.close(); 
     op.close(); 
    } 

Domanda 1: Come faccio a implementare il funzionamento azione con intestazioni personalizzate per eseguire spostare/rinominare e impostare le autorizzazioni? Dovrebbe essere possibile senza l'API OBEX JSR82. Per favore aiutami a fare questo.

Domanda 2: Ho capito come impostare le autorizzazioni? Secondo OBEX_Errata compilati per 1.3.pdf

1 http://i45.tinypic.com/2h84led.jpg

2 http://i49.tinypic.com/2wgysmx.png

Quindi, per impostare sola lettura, devo fare la seguente (grazie alanjmcf!):

int a = 0; 

    //byte 0 //zero 
    //byte 1 //user 
    //byte 2 //group 
    //byte 3 //other 

    //set read for user 
    a |= (1 << 7); //8th bit - byte 1, bit 0 -> set to 1 
    // a = 10000000 

    //for group 
    a |= (1 << 15); //16th bit - byte 2, bit 0 -> set to 1 
    // a = 1000000010000000 

    //for other 
    a |= (1 << 23); //24th bit - byte 3, bit 0 -> set to 1 
    // a = 100000001000000010000000 

    //or simply 
    private static final int READ = 8421504 //1000,0000,1000,0000,1000,0000 
    int value = 0 | READ; 

    //========== calculate write constant ========= 
    a = 0; 
    a |= (1 << 8); //write user 
    a |= (1 << 16); //write group 
    a |= (1 << 24); //write other 
    // a = 1000000010000000100000000 
    private static final int WRITE = 16843008 // 1,0000,0001,0000,0001,0000,0000 

    //========= calculate delete constant ========== 
    a = 0; 
    a |= (1 << 9); //delete user 
    a |= (1 << 17); //delete group 
    a |= (1 << 25); //delete other 
    //a = 10000000100000001000000000 
    private static final DELETE = 33686016; //10,0000,0010,0000,0010,0000,0000 

    //========= calculate modify constant ========== 
    a = 0; 
    a |= (1 << (7 + 7)); //modify user 
    a |= (1 << (15 + 7)); //modify group 
    a |= (1 << (23 + 7)); //modify other 
    //a = 1000000010000000100000000000000 
    private static final MODIFY = 1077952512; // 100,0000,0100,0000,0100,0000,0000,0000 


    // now, if i want to set read-write-delete-modify, I will do the following: 
    int rwdm = 0 | READ | WRITE | DELETE | MODIFY; 
    // and put the value to the header... am I right? 

se a destra, l'unico problema rimane la domanda 1: come faccio a fare l'operazione ACTION e come impostare le intestazioni.

+0

+1 per tutte le immagini splendenti! –

+1

http://code.google.com/p/blueframe/source/checkout - forse qualcosa lì dentro –

+0

@AmigableClarkKant I dispositivi scambiano dati del proprio formato. Non mi aiuta a creare intestazioni che il dispositivo di destinazione riconoscerà come OBEX. –

risposta

3

Si noti che il testo che si cita dalla specifica FTP Bluetooth menziona tre intestazioni: ID azione, Nome, Nome dest. Quindi è necessario aggiungere un'intestazione NAME e un'intestazione DestName. JSR-82 a quanto pare non definisce il const per questo (nuovo) un colpo di testa in modo da citare la specifica OBEX:

MODIFICA
2.1 OBEX intestazioni

HI identifier | Header name | Description 
0x94   Action Id  Specifies the action to be performed (used in ACTION operation) 
0x15   DestName  The destination object name (used in certain ACTION operations) 
0xD6   Permissions 4 byte bit mask for setting permissions 
0x17 to 0x2F Reserved for future use. This range includes all combinations of the upper 2 bits 

Quindi creare la seguente ecc (mio di Java un bit arrugginito)

static final int DEST_NAME = 0x15; 

E utilizzarlo nel codice.

[AGGIUNGI] Tutte le operazioni (azioni) che sono azioni utilizzano l'operazione ACTION! : -,) Vale a dire OBEX opcode ACTION invece di PUT o GET ecc. Il valore dell'opcode ACTION è 0x86.

Sto leggendo questo da "OBEX_Errata Compiled For 1.3.pdf". L'IrDA ha fatto pagare le specifiche ma sembra ora fornirle su richiesta (http://www.irda.org). Richiedi una copia delle ultime specifiche OBEX (1.5 IIRC). L'ho fatto anch'io ma non ho ancora ricevuto una risposta. Oppure potresti provare googling per dire "sposta/rinomina azione oggetto" per ottenere il PDF "Errata 1.3".

In ogni caso, se Java impedisce l'utilizzo di nuovi Opcode (consentendo solo GET e PUT) e impedisce anche l'utilizzo di nuovi valori di HeaderId, non è possibile procedere comunque. :-(* Non c'è alcun motivo per farlo mentre HeaderId codifica il tipo di dati che contiene)

Dopo aver esaminato di nuovo l'API Java, non riesco a vedere alcun modo di inviare un comando arbitrario su ClientSession. Dovresti creare manualmente i pacchetti, collegarti al servizio OBEX e quindi inviare e ricevere pacchetti su quella connessione.Non è troppo difficile costruire i pacchetti ...

+0

Ma non ho ancora idea di come farlo. –

+0

Sebbene questa risposta sia stata assegnata, la mia domanda rimane senza risposta. –

Problemi correlati