5

Bluetooth FTP 仕様では、ACTION 操作を使用する必要があると記載されています。ページは次のとおりです。

ただし、ClentSessionは GET および PUT 操作のみを提供し、Javadoc には何も記載されていません。

ファイルの作成操作は次のようになります。非常に簡単です。

    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();
    }

質問 1: カスタム ヘッダーを使用して ACTION 操作を実装し、移動/名前変更およびアクセス許可の設定を実行するにはどうすればよいですか? JSR82 OBEX API がなくても可能です。これを行うのを手伝ってください。

質問 2: アクセス許可の設定方法は理解できましたか? OBEX_Errata Compiled For 1.3.pdf によると (alanjmcf に感謝!)

1

2

したがって、読み取り専用に設定するには、次の手順を実行する必要があります。

    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?

正しい場合、唯一の問題は質問 1 のままです。ACTION 操作を行う方法とヘッダーを設定する方法です。

4

1 に答える 1

3

Bluetooth FTP 仕様から引用したテキストには、ActionId、Name、DestName の 3 つのヘッダーが記載されていることに注意してください。したがって、1 つの NAME ヘッダーと 1 つの DestName ヘッダーを追加する必要があります。Jsr-82 は明らかにその (新しい) ヘッダーの const を定義していないため、OBEX 仕様から引用します。

変更
2.1 OBEX ヘッダー

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

ということで以下などを作成(私のJavaはちょっと錆びています)

static final int DEST_NAME = 0x15;

そして、それをコードで使用します。

【追加】アクションであるすべての操作(アクション)はACTION操作を使用!:-,) つまり、PUT や GET などの代わりに OBEX オペコード ACTION を使用します。オペコード ACTION の値は0x86です。

「OBEX_Errata Compiled For 1.3.pdf」からこれを読んでいます。IrDA は仕様を有料で提供していましたが、現在は要求に応じて提供しているようです ( http://www.irda.org )。最新の OBEX 仕様 (1.5 IIRC) のコピーを入手してください。自分もそうしましたが、まだ返事がありません。または、「オブジェクトの移動/名前変更アクション」と言ってグーグルで検索して、「1.3 Errata」PDF を取得することもできます。

いずれにせよ、Java が新しいオペコードの使用を禁止し (GET と PUT のみを許可)、新しい HeaderId 値の使用も禁止している場合は、先に進むことはできません。:-( *(HeaderId は含まれるデータ型をエンコードするため、それを行う理由はありません)。

Java API をもう一度見てみると、ClientSession を介して任意のコマンドを送信する方法がわかりません。手動でパケットを作成し、OBEX サービスに接続してから、その接続を介してパケットを送受信する必要があります。パケットを作成するのはそれほど難しくありません...

于 2012-05-03T09:36:34.317 に答える