summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/io
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2017-12-12 18:32:19 -0800
committerThiago Macieira <thiago.macieira@intel.com>2018-01-26 20:59:50 +0000
commita6b697ca13945a174cff9f3e9b1af1cf61c0bea5 (patch)
tree78d5fad97ff8e89f079df29cc5a75b4e7197bfc7 /tests/auto/corelib/io
parent657894624521b580f59ff5f58b9c0e9be159dc1c (diff)
Create corelib/serialization and move existing file formats into it
This is in preparation to adding CBOR support. We don't need yet another dir for CBOR and placing it in src/corelib/json is just wrong. Change-Id: I9741f017961b410c910dfffd14ffb9d870340fa6 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'tests/auto/corelib/io')
-rw-r--r--tests/auto/corelib/io/io.pro6
-rw-r--r--tests/auto/corelib/io/qdatastream/.gitignore2
-rw-r--r--tests/auto/corelib/io/qdatastream/datastream.q42bin668 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qdatastream/qdatastream.pro11
-rw-r--r--tests/auto/corelib/io/qdatastream/testdata.qrc5
-rw-r--r--tests/auto/corelib/io/qdatastream/tst_qdatastream.cpp3484
-rw-r--r--tests/auto/corelib/io/qtextstream/.gitattributes3
-rw-r--r--tests/auto/corelib/io/qtextstream/.gitignore11
-rw-r--r--tests/auto/corelib/io/qtextstream/BLACKLIST3
-rw-r--r--tests/auto/corelib/io/qtextstream/qtextstream.pro2
-rw-r--r--tests/auto/corelib/io/qtextstream/qtextstream.qrc6
-rw-r--r--tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp37
-rw-r--r--tests/auto/corelib/io/qtextstream/readAllStdinProcess/readAllStdinProcess.pro9
-rw-r--r--tests/auto/corelib/io/qtextstream/readLineStdinProcess/main.cpp47
-rw-r--r--tests/auto/corelib/io/qtextstream/readLineStdinProcess/readLineStdinProcess.pro9
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.databin6 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.databin116 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.databin6 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.databin116 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.databin32 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.databin36 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.databin36 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.databin36 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource10.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource11.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource12.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource20.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource21.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource9.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.databin6 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.databin116 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.databin6 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.databin116 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data0
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data2
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.databin8 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.databin118 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.databin2 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.databin4 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.databin32 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.databin36 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.databin36 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.databin34 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.databin36 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.databin28 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.databin30 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.databin26 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.databin22 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.databin24 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.databin14 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.databin16 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.databin18 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.databin20 -> 0 bytes
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource0.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource1.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource10.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource11.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource12.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource2.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource20.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource21.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource3.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource4.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource5.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource6.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource7.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource8.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource9.data1
-rw-r--r--tests/auto/corelib/io/qtextstream/rfc3261.txt15067
-rw-r--r--tests/auto/corelib/io/qtextstream/shift-jis.txt764
-rw-r--r--tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp42
-rw-r--r--tests/auto/corelib/io/qtextstream/stdinProcess/stdinProcess.pro9
-rw-r--r--tests/auto/corelib/io/qtextstream/task113817.txt1095
-rw-r--r--tests/auto/corelib/io/qtextstream/test/test.pro26
-rw-r--r--tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp3057
1032 files changed, 1 insertions, 24152 deletions
diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro
index bd2a9f4c8e..5618a42203 100644
--- a/tests/auto/corelib/io/io.pro
+++ b/tests/auto/corelib/io/io.pro
@@ -2,7 +2,6 @@ TEMPLATE=subdirs
SUBDIRS=\
qabstractfileengine \
qbuffer \
- qdatastream \
qdataurl \
qdebug \
qdir \
@@ -30,19 +29,16 @@ SUBDIRS=\
qstorageinfo \
qtemporarydir \
qtemporaryfile \
- qtextstream \
qurl \
qurlinternal \
qurlquery \
!qtHaveModule(gui): SUBDIRS -= \
- qdatastream \
qsettings
!qtHaveModule(network): SUBDIRS -= \
qiodevice \
- qprocess \
- qtextstream
+ qprocess
!qtHaveModule(concurrent): SUBDIRS -= \
qdebug \
diff --git a/tests/auto/corelib/io/qdatastream/.gitignore b/tests/auto/corelib/io/qdatastream/.gitignore
deleted file mode 100644
index cdcbaa591e..0000000000
--- a/tests/auto/corelib/io/qdatastream/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-datastream.tmp
-tst_qdatastream
diff --git a/tests/auto/corelib/io/qdatastream/datastream.q42 b/tests/auto/corelib/io/qdatastream/datastream.q42
deleted file mode 100644
index 5c83f5c7fc..0000000000
--- a/tests/auto/corelib/io/qdatastream/datastream.q42
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qdatastream/qdatastream.pro b/tests/auto/corelib/io/qdatastream/qdatastream.pro
deleted file mode 100644
index 291b3eb611..0000000000
--- a/tests/auto/corelib/io/qdatastream/qdatastream.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qdatastream
-QT += testlib
-SOURCES = tst_qdatastream.cpp
-
-TESTDATA += datastream.q42
-
-android {
- RESOURCES += \
- testdata.qrc
-}
diff --git a/tests/auto/corelib/io/qdatastream/testdata.qrc b/tests/auto/corelib/io/qdatastream/testdata.qrc
deleted file mode 100644
index fb63cb3438..0000000000
--- a/tests/auto/corelib/io/qdatastream/testdata.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>datastream.q42</file>
- </qresource>
-</RCC>
diff --git a/tests/auto/corelib/io/qdatastream/tst_qdatastream.cpp b/tests/auto/corelib/io/qdatastream/tst_qdatastream.cpp
deleted file mode 100644
index 14a2528cc6..0000000000
--- a/tests/auto/corelib/io/qdatastream/tst_qdatastream.cpp
+++ /dev/null
@@ -1,3484 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtTest/QtTest>
-#include <QtGui/QBitmap>
-#include <QtGui/QPalette>
-#include <QtGui/QPixmap>
-#include <QtGui/QPicture>
-#include <QtGui/QTextLength>
-#include <QtGui/QPainter>
-#include <QtGui/QPen>
-
-class tst_QDataStream : public QObject
-{
-Q_OBJECT
-
-public:
- void stream_data(int noOfElements);
-
-public slots:
- void initTestCase();
- void cleanupTestCase();
-
-private slots:
- void getSetCheck();
- void stream_bool_data();
- void stream_bool();
-
- void stream_QBitArray_data();
- void stream_QBitArray();
-
- void stream_QBrush_data();
- void stream_QBrush();
-
- void stream_QColor_data();
- void stream_QColor();
-
- void stream_QByteArray_data();
- void stream_QByteArray();
-
-#ifndef QT_NO_CURSOR
- void stream_QCursor_data();
- void stream_QCursor();
-#endif
-
- void stream_QDate_data();
- void stream_QDate();
-
- void stream_QTime_data();
- void stream_QTime();
-
- void stream_QDateTime_data();
- void stream_QDateTime();
-
- void stream_nullptr_t_data();
- void stream_nullptr_t();
-
- void stream_QFont_data();
- void stream_QFont();
-
- void stream_QImage_data();
- void stream_QImage();
-
- void stream_QPen_data();
- void stream_QPen();
-
- void stream_QPixmap_data();
- void stream_QPixmap();
-
- void stream_QPoint_data();
- void stream_QPoint();
-
- void stream_QRect_data();
- void stream_QRect();
-
- void stream_QPolygon_data();
- void stream_QPolygon();
-
- void stream_QRegion_data();
- void stream_QRegion();
-
- void stream_QSize_data();
- void stream_QSize();
-
- void stream_QString_data();
- void stream_QString();
-
- void stream_QRegExp_data();
- void stream_QRegExp();
-
- void stream_Map_data();
- void stream_Map();
-
- void stream_Hash_data();
- void stream_Hash();
-
- void stream_qint64_data();
- void stream_qint64();
-
- void stream_QIcon_data();
- void stream_QIcon();
-
- void stream_QEasingCurve_data();
- void stream_QEasingCurve();
-
- void stream_atEnd_data();
- void stream_atEnd();
-
- void stream_writeError();
-
- void stream_QByteArray2();
-
- void setVersion_data();
- void setVersion();
-
- void skipRawData_data();
- void skipRawData();
-
- void status_qint8_data();
- void status_qint8();
- void status_qint16_data();
- void status_qint16();
- void status_qint32_data();
- void status_qint32();
- void status_qint64_data();
- void status_qint64();
-
- void status_float_data();
- void status_float();
- void status_double_data();
- void status_double();
-
- void status_charptr_QByteArray_data();
- void status_charptr_QByteArray();
-
- void status_QString_data();
- void status_QString();
-
- void status_QBitArray_data();
- void status_QBitArray();
-
- void status_QHash_QMap();
-
- void status_QLinkedList_QList_QVector();
-
- void streamToAndFromQByteArray();
-
- void streamRealDataTypes();
-
- void floatingPointPrecision();
-
- void compatibility_Qt3();
- void compatibility_Qt2();
-
- void floatingPointNaN();
-
- void transaction_data();
- void transaction();
- void nestedTransactionsResult_data();
- void nestedTransactionsResult();
-
-private:
- void writebool(QDataStream *s);
- void writeQBitArray(QDataStream *s);
- void writeQBrush(QDataStream *s);
- void writeQColor(QDataStream *s);
- void writeQByteArray(QDataStream *s);
- void writenullptr_t(QDataStream *s);
-#ifndef QT_NO_CURSOR
- void writeQCursor(QDataStream *s);
-#endif
- void writeQWaitCursor(QDataStream *s);
- void writeQDate(QDataStream *s);
- void writeQTime(QDataStream *s);
- void writeQDateTime(QDataStream *s);
- void writeQFont(QDataStream *s);
- void writeQImage(QDataStream *s);
- void writeQPen(QDataStream *s);
- void writeQPixmap(QDataStream *s);
- void writeQPoint(QDataStream *s);
- void writeQRect(QDataStream *s);
- void writeQPolygon(QDataStream *s);
- void writeQRegion(QDataStream *s);
- void writeQSize(QDataStream *s);
- void writeQString(QDataStream* dev);
- void writeQRegExp(QDataStream* dev);
- void writeMap(QDataStream* dev);
- void writeHash(QDataStream* dev);
- void writeqint64(QDataStream *s);
- void writeQIcon(QDataStream *s);
- void writeQEasingCurve(QDataStream *s);
-
- void readbool(QDataStream *s);
- void readQBitArray(QDataStream *s);
- void readQBrush(QDataStream *s);
- void readQColor(QDataStream *s);
- void readQByteArray(QDataStream *s);
- void readnullptr_t(QDataStream *s);
-#ifndef QT_NO_CURSOR
- void readQCursor(QDataStream *s);
-#endif
- void readQDate(QDataStream *s);
- void readQTime(QDataStream *s);
- void readQDateTime(QDataStream *s);
- void readQFont(QDataStream *s);
- void readQImage(QDataStream *s);
- void readQPen(QDataStream *s);
- void readQPixmap(QDataStream *s);
- void readQPoint(QDataStream *s);
- void readQRect(QDataStream *s);
- void readQPolygon(QDataStream *s);
- void readQRegion(QDataStream *s);
- void readQSize(QDataStream *s);
- void readQString(QDataStream *s);
- void readQRegExp(QDataStream *s);
- void readMap(QDataStream *s);
- void readHash(QDataStream *s);
- void readqint64(QDataStream *s);
- void readQIcon(QDataStream *s);
- void readQEasingCurve(QDataStream *s);
-
-private:
- QSharedPointer<QTemporaryDir> m_tempDir;
- QString m_previousCurrent;
-};
-
-static int NColorRoles[] = {
- QPalette::NoRole, // No Version
- QPalette::NoRole, // Qt_1_0
- QPalette::HighlightedText + 1, // Qt_2_0
- QPalette::HighlightedText + 1, // Qt_2_1
- QPalette::LinkVisited + 1, // Qt_3_0
- QPalette::HighlightedText + 1, // Qt_3_1
- QPalette::HighlightedText + 1, // Qt_3_3
- QPalette::HighlightedText + 1, // Qt_4_0, Qt_4_1
- QPalette::HighlightedText + 1, // Qt_4_2
- QPalette::AlternateBase + 1, // Qt_4_3
- QPalette::ToolTipText + 1, // Qt_4_4
- QPalette::ToolTipText + 1, // Qt_4_5
- QPalette::ToolTipText + 1, // Qt_4_6
- QPalette::ToolTipText + 1, // Qt_5_0
- QPalette::ToolTipText + 1, // Qt_5_1
- QPalette::ToolTipText + 1, // Qt_5_2
- QPalette::ToolTipText + 1, // Qt_5_3
- QPalette::ToolTipText + 1, // Qt_5_4
- QPalette::ToolTipText + 1, // Qt_5_5
- QPalette::ToolTipText + 1, // Qt_5_6
- 0 // add the correct value for Qt_5_7 here later
-};
-
-// Testing get/set functions
-void tst_QDataStream::getSetCheck()
-{
- QDataStream obj1;
- // QIODevice * QDataStream::device()
- // void QDataStream::setDevice(QIODevice *)
- QFile *var1 = new QFile;
- obj1.setDevice(var1);
- QCOMPARE((QIODevice *)var1, (QIODevice *)obj1.device());
- obj1.setDevice((QIODevice *)0);
- QCOMPARE((QIODevice *)0, (QIODevice *)obj1.device());
- delete var1;
-
- // Status QDataStream::status()
- // void QDataStream::setStatus(Status)
- obj1.setStatus(QDataStream::Ok);
- QCOMPARE(QDataStream::Ok, obj1.status());
- obj1.setStatus(QDataStream::ReadPastEnd);
- QCOMPARE(QDataStream::ReadPastEnd, obj1.status());
- obj1.resetStatus();
- obj1.setStatus(QDataStream::ReadCorruptData);
- QCOMPARE(QDataStream::ReadCorruptData, obj1.status());
-}
-
-void tst_QDataStream::initTestCase()
-{
- m_previousCurrent = QDir::currentPath();
- m_tempDir = QSharedPointer<QTemporaryDir>::create();
- QVERIFY2(!m_tempDir.isNull(), qPrintable("Could not create temporary directory."));
- QVERIFY2(QDir::setCurrent(m_tempDir->path()), qPrintable("Could not switch current directory"));
-}
-
-void tst_QDataStream::cleanupTestCase()
-{
- QFile::remove(QLatin1String("qdatastream.out"));
- QFile::remove(QLatin1String("datastream.tmp"));
-
- QDir::setCurrent(m_previousCurrent);
-}
-
-static int dataIndex(const QString &tag)
-{
- int pos = tag.lastIndexOf(QLatin1Char('_'));
- if (pos >= 0) {
- int ret = 0;
- QString count = tag.mid(pos + 1);
- bool ok;
- ret = count.toInt(&ok);
- if (ok)
- return ret;
- }
- return -1;
-}
-
-static const char * const devices[] = {
- "file",
- "bytearray",
- "buffer",
- 0
-};
-
-/*
- IMPORTANT.
- In this testcase i follow a different approach than usual: I don't use the full power of
- QtTestTable and QtTestData. This is done deliberately because QtTestData uses a QDataStream
- itself to handle its data. So it would be a bit inapropriate to fully rely on QtTestData in this
- testcase.
- I do use QString in QtTestData because this is thouroughly tested in the selftest.
-*/
-void tst_QDataStream::stream_data(int noOfElements)
-{
- QTest::addColumn<QString>("device");
- QTest::addColumn<QString>("byteOrder");
-
- for (int d=0; devices[d] != 0; d++) {
- QString device = devices[d];
- for (int b=0; b<2; b++) {
- QString byte_order = b == 0 ? "BigEndian" : "LittleEndian";
-
- QString tag = device + QLatin1Char('_') + byte_order;
- for (int e=0; e<noOfElements; e++) {
- QTest::newRow(qPrintable(tag + QLatin1Char('_') + QString::number(e))) << device << byte_order;
- }
- }
- }
-}
-
-static const char* open_xpm[]={
-"16 13 6 1",
-". c None",
-"b c #ffff00",
-"d c #000000",
-"* c #999999",
-"c c #cccccc",
-"a c #ffffff",
-"...*****........",
-"..*aaaaa*.......",
-".*abcbcba******.",
-".*acbcbcaaaaaa*d",
-".*abcbcbcbcbcb*d",
-"*************b*d",
-"*aaaaaaaaaa**c*d",
-"*abcbcbcbcbbd**d",
-".*abcbcbcbcbcd*d",
-".*acbcbcbcbcbd*d",
-"..*acbcbcbcbb*dd",
-"..*************d",
-"...ddddddddddddd"};
-
-#define STREAM_IMPL(TYPE) \
- QFETCH(QString, device); \
- if (device == "bytearray") { \
- QByteArray ba; \
- QDataStream sout(&ba, QIODevice::WriteOnly); \
- write##TYPE(&sout); \
- QDataStream sin(&ba, QIODevice::ReadOnly); \
- read##TYPE(&sin); \
- } else if (device == "file") { \
- QString fileName = "qdatastream.out"; \
- QFile fOut(fileName); \
- QVERIFY(fOut.open(QIODevice::WriteOnly)); \
- QDataStream sout(&fOut); \
- write##TYPE(&sout); \
- fOut.close(); \
- QFile fIn(fileName); \
- QVERIFY(fIn.open(QIODevice::ReadOnly)); \
- QDataStream sin(&fIn); \
- read##TYPE(&sin); \
- fIn.close(); \
- } else if (device == "buffer") { \
- QByteArray ba(10000, '\0'); \
- QBuffer bOut(&ba); \
- bOut.open(QIODevice::WriteOnly); \
- QDataStream sout(&bOut); \
- write##TYPE(&sout); \
- bOut.close(); \
- QBuffer bIn(&ba); \
- bIn.open(QIODevice::ReadOnly); \
- QDataStream sin(&bIn); \
- read##TYPE(&sin); \
- bIn.close(); \
- }
-
-// ************************************
-
-static QString stringData(int index)
-{
- switch (index) {
- case 0: return QString();
- case 1: return QString("");
- case 2: return QString("A");
- case 3: return QString("ABCDE FGHI");
- case 4: return QString("This is a long string");
- case 5: return QString("And again a string with a \nCRLF");
- case 6: return QString("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRESTUVWXYZ 1234567890 ~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/");
- }
- return QString("foo");
-}
-#define MAX_QSTRING_DATA 7
-
-void tst_QDataStream::stream_QString_data()
-{
- stream_data(MAX_QSTRING_DATA);
-}
-
-void tst_QDataStream::stream_QString()
-{
- STREAM_IMPL(QString);
-}
-
-void tst_QDataStream::writeQString(QDataStream* s)
-{
- QString test(stringData(dataIndex(QTest::currentDataTag())));
- *s << test;
- *s << QString("Her er det noe tekst");
- *s << test;
- *s << QString();
- *s << test;
- *s << QString("");
- *s << test;
- *s << QString("nonempty");
- *s << test;
-}
-
-void tst_QDataStream::readQString(QDataStream *s)
-{
- QString S;
- QString test(stringData(dataIndex(QTest::currentDataTag())));
-
- *s >> S;
- QCOMPARE(S, test);
- *s >> S;
- QCOMPARE(S, QString("Her er det noe tekst"));
- *s >> S;
- QCOMPARE(S, test);
- *s >> S;
- QVERIFY(S.isNull());
- *s >> S;
- QCOMPARE(S, test);
- *s >> S;
- QVERIFY(S.isEmpty());
- *s >> S;
- QCOMPARE(S, test);
- *s >> S;
- QCOMPARE(S, QString("nonempty"));
- *s >> S;
- QCOMPARE(S, test);
-}
-
-// ************************************
-
-static QRegExp QRegExpData(int index)
-{
- switch (index) {
- case 0: return QRegExp();
- case 1: return QRegExp("");
- case 2: return QRegExp("A", Qt::CaseInsensitive);
- case 3: return QRegExp("ABCDE FGHI", Qt::CaseSensitive, QRegExp::Wildcard);
- case 4: return QRegExp("This is a long string", Qt::CaseInsensitive, QRegExp::FixedString);
- case 5: return QRegExp("And again a string with a \nCRLF", Qt::CaseInsensitive, QRegExp::RegExp);
- case 6:
- {
- QRegExp rx("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRESTUVWXYZ 1234567890 ~`!@#$%^&*()_-+={[}]|\\:;\"'<,>.?/");
- rx.setMinimal(true);
- return rx;
- }
- }
- return QRegExp("foo");
-}
-#define MAX_QREGEXP_DATA 7
-
-void tst_QDataStream::stream_QRegExp_data()
-{
- stream_data(MAX_QREGEXP_DATA);
-}
-
-void tst_QDataStream::stream_QRegExp()
-{
- STREAM_IMPL(QRegExp);
-}
-
-void tst_QDataStream::writeQRegExp(QDataStream* s)
-{
- QRegExp test(QRegExpData(dataIndex(QTest::currentDataTag())));
- *s << test;
- *s << QString("Her er det noe tekst");
- *s << test;
- *s << QString("nonempty");
- *s << test;
- *s << QVariant(test);
-}
-
-void tst_QDataStream::readQRegExp(QDataStream *s)
-{
- QRegExp R;
- QString S;
- QVariant V;
- QRegExp test(QRegExpData(dataIndex(QTest::currentDataTag())));
-
- *s >> R;
- QCOMPARE(R, test);
- *s >> S;
- QCOMPARE(S, QString("Her er det noe tekst"));
- *s >> R;
- QCOMPARE(R, test);
- *s >> S;
- QCOMPARE(S, QString("nonempty"));
- *s >> R;
- QCOMPARE(R, test);
- *s >> V;
- QCOMPARE(V.type(), QVariant::RegExp);
- QCOMPARE(V.toRegExp(), test);
-}
-
-// ************************************
-
-typedef QMap<int, QString> Map;
-
-static Map MapData(int index)
-{
- Map map;
-
- switch (index) {
- case 0:
- default:
- break;
- case 1:
- map.insert(1, "a");
- map.insert(2, "bbb");
- map.insert(3, "cccccc");
- break;
- case 2:
- map.insert(1, "a");
- map.insert(2, "one");
- map.insertMulti(2, "two");
- map.insertMulti(2, "three");
- map.insert(3, "cccccc");
- }
- return map;
-}
-#define MAX_MAP_DATA 3
-
-void tst_QDataStream::stream_Map_data()
-{
- stream_data(MAX_MAP_DATA);
-}
-
-void tst_QDataStream::stream_Map()
-{
- STREAM_IMPL(Map);
-}
-
-void tst_QDataStream::writeMap(QDataStream* s)
-{
- Map test(MapData(dataIndex(QTest::currentDataTag())));
- *s << test;
- *s << test;
-}
-
-void tst_QDataStream::readMap(QDataStream *s)
-{
- Map S;
- Map test(MapData(dataIndex(QTest::currentDataTag())));
-
- *s >> S;
- QCOMPARE(S, test);
- *s >> S;
- QCOMPARE(S, test);
-}
-
-// ************************************
-
-typedef QHash<int, QString> Hash;
-
-static Hash HashData(int index)
-{
- Hash map;
-
- switch (index) {
- case 0:
- default:
- break;
- case 1:
- map.insert(1, "a");
- map.insert(2, "bbb");
- map.insert(3, "cccccc");
- break;
- case 2:
- map.insert(1, "a");
- map.insert(2, "one");
- map.insertMulti(2, "two");
- map.insertMulti(2, "three");
- map.insert(3, "cccccc");
- }
- return map;
-}
-#define MAX_HASH_DATA 3
-
-void tst_QDataStream::stream_Hash_data()
-{
- stream_data(MAX_HASH_DATA);
-}
-
-void tst_QDataStream::stream_Hash()
-{
- STREAM_IMPL(Hash);
-}
-
-void tst_QDataStream::writeHash(QDataStream* s)
-{
- Hash test(HashData(dataIndex(QTest::currentDataTag())));
- *s << test;
- *s << test;
-}
-
-void tst_QDataStream::readHash(QDataStream *s)
-{
- Hash S;
- Hash test(HashData(dataIndex(QTest::currentDataTag())));
-
- *s >> S;
- QCOMPARE(S, test);
- *s >> S;
- QCOMPARE(S, test);
-}
-
-// ************************************
-
-static QEasingCurve QEasingCurveData(int index)
-{
- QEasingCurve easing;
-
- switch (index) {
- case 0:
- default:
- break;
- case 1:
- easing.setType(QEasingCurve::Linear);
- break;
- case 2:
- easing.setType(QEasingCurve::OutCubic);
- break;
- case 3:
- easing.setType(QEasingCurve::InOutSine);
- break;
- case 4:
- easing.setType(QEasingCurve::InOutElastic);
- easing.setPeriod(1.5);
- easing.setAmplitude(2.0);
- break;
- case 5:
- easing.setType(QEasingCurve::OutInBack);
- break;
- case 6:
- easing.setType(QEasingCurve::OutCurve);
- break;
- case 7:
- easing.setType(QEasingCurve::InOutBack);
- easing.setOvershoot(0.5);
- break;
- }
- return easing;
-}
-#define MAX_EASING_DATA 8
-
-void tst_QDataStream::stream_QEasingCurve_data()
-{
- stream_data(MAX_EASING_DATA);
-}
-
-void tst_QDataStream::stream_QEasingCurve()
-{
- STREAM_IMPL(QEasingCurve);
-}
-
-void tst_QDataStream::writeQEasingCurve(QDataStream* s)
-{
- QEasingCurve test(QEasingCurveData(dataIndex(QTest::currentDataTag())));
- *s << test;
-}
-
-void tst_QDataStream::readQEasingCurve(QDataStream *s)
-{
- QEasingCurve S;
- QEasingCurve expected(QEasingCurveData(dataIndex(QTest::currentDataTag())));
-
- *s >> S;
- QCOMPARE(S, expected);
-}
-
-// ************************************
-
-// contains some quint64 testing as well
-
-#define MAX_qint64_DATA 4
-
-static qint64 qint64Data(int index)
-{
- switch (index) {
- case 0: return qint64(0);
- case 1: return qint64(1);
- case 2: return qint64(-1);
- case 3: return qint64(1) << 40;
- case MAX_qint64_DATA: return -(qint64(1) << 40);
- }
-
- return -1;
-}
-
-void tst_QDataStream::stream_qint64_data()
-{
- stream_data(MAX_qint64_DATA+1);
-}
-
-void tst_QDataStream::stream_qint64()
-{
- STREAM_IMPL(qint64);
-}
-
-void tst_QDataStream::writeqint64(QDataStream* s)
-{
- qint64 test = qint64Data(dataIndex(QTest::currentDataTag()));
- *s << test;
- *s << int(1);
- *s << (quint64)test;
-}
-
-void tst_QDataStream::readqint64(QDataStream *s)
-{
- qint64 test = qint64Data(dataIndex(QTest::currentDataTag()));
- qint64 i64;
- quint64 ui64;
- int i;
- *s >> i64;
- QCOMPARE(i64, test);
- *s >> i;
- QCOMPARE(i, int(1));
- *s >> ui64;
- QCOMPARE(ui64, (quint64)test);
-}
-
-// ************************************
-
-static bool boolData(int index)
-{
- switch (index) {
- case 0: return true;
- case 1: return false;
- case 2: return bool(2);
- case 3: return bool(-1);
- case 4: return bool(127);
- }
-
- return false;
-}
-
-void tst_QDataStream::stream_bool_data()
-{
- stream_data(5);
-}
-
-void tst_QDataStream::stream_bool()
-{
- STREAM_IMPL(bool);
-}
-
-void tst_QDataStream::writebool(QDataStream *s)
-{
- bool d1 = boolData(dataIndex(QTest::currentDataTag()));
- *s << d1;
-}
-
-void tst_QDataStream::readbool(QDataStream *s)
-{
- bool expected = boolData(dataIndex(QTest::currentDataTag()));
-
- bool d1;
- *s >> d1;
- QCOMPARE(d1, expected);
-}
-
-// ************************************
-
-static void QBitArrayData(QBitArray *b, int index)
-{
- QString filler = "";
- switch (index) {
- case 0: filler = ""; break;
- case 1: filler = ""; break;
- case 2: filler = "0"; break;
- case 3: filler = "1"; break;
- case 4: filler = "0000"; break;
- case 5: filler = "0001"; break;
- case 6: filler = "0010"; break;
- case 7: filler = "0100"; break;
- case 8: filler = "1000"; break;
- case 9: filler = "1111"; break;
- case 10: filler = "00000000"; break;
- case 11: filler = "00000001"; break;
- case 12: filler = "11111111"; break;
- case 13: filler = "000000001"; break;
- case 14: filler = "000000000001"; break;
- case 15: filler = "0000000000000001"; break;
- case 16: filler = "0101010101010101010101010101010101010101010101010101010101010101"; break;
- case 17: filler = "1010101010101010101010101010101010101010101010101010101010101010"; break;
- case 18: filler = "1111111111111111111111111111111111111111111111111111111111111111"; break;
- }
-
- b->resize(filler.length());
- b->fill(0); // reset all bits to zero
-
- for (int i = 0; i < filler.length(); ++i) {
- if (filler.at(i) == '1')
- b->setBit(i, true);
- }
-}
-
-void tst_QDataStream::stream_QBitArray_data()
-{
- stream_data(19);
-}
-
-void tst_QDataStream::stream_QBitArray()
-{
- STREAM_IMPL(QBitArray);
-}
-
-void tst_QDataStream::writeQBitArray(QDataStream *s)
-{
- QBitArray d1;
- QBitArrayData(&d1, dataIndex(QTest::currentDataTag()));
- *s << d1;
-}
-
-void tst_QDataStream::readQBitArray(QDataStream *s)
-{
- QBitArray expected;
- QBitArrayData(&expected, dataIndex(QTest::currentDataTag()));
-
- QBitArray d1;
- *s >> d1;
- QCOMPARE(d1, expected);
-}
-
-// ************************************
-
-static QBrush qBrushData(int index)
-{
- switch (index) {
- case 0: return QBrush(Qt::NoBrush);
- case 1: return QBrush(Qt::SolidPattern);
- case 2: return QBrush(Qt::Dense7Pattern);
- case 3: return QBrush(Qt::red, Qt::NoBrush);
- case 4: return QBrush(Qt::green, Qt::SolidPattern);
- case 5: return QBrush(Qt::blue, Qt::Dense7Pattern);
- case 6:
- {
- QPixmap pm(open_xpm);
- QBrush custom(Qt::black, pm);
- return custom;
- }
- case 7:
- QLinearGradient gradient(QPointF(2.718, 3.142), QPointF(3.1337, 42));
- gradient.setCoordinateMode(QGradient::ObjectBoundingMode);
- gradient.setSpread(QGradient::ReflectSpread);
- gradient.setInterpolationMode(QGradient::ComponentInterpolation);
- gradient.setColorAt(0.2, Qt::red);
- gradient.setColorAt(0.6, Qt::transparent);
- gradient.setColorAt(0.8, Qt::blue);
- return QBrush(gradient);
- }
-
- return QBrush(Qt::NoBrush);
-}
-
-void tst_QDataStream::stream_QBrush_data()
-{
- stream_data(8);
-}
-
-void tst_QDataStream::stream_QBrush()
-{
- if (QString(QTest::currentDataTag()).endsWith("6"))
- QSKIP("Custom brushes don't seem to be supported with QDataStream");
-
- STREAM_IMPL(QBrush);
-}
-
-void tst_QDataStream::writeQBrush(QDataStream *s)
-{
- QBrush brush = qBrushData(dataIndex(QTest::currentDataTag()));
- *s << brush;
-}
-
-void tst_QDataStream::readQBrush(QDataStream *s)
-{
- QBrush d2;
- *s >> d2;
-
- QBrush brush = qBrushData(dataIndex(QTest::currentDataTag()));
- QCOMPARE(d2, brush);
-}
-
-// ************************************
-
-static QColor QColorData(int index)
-{
- switch (index) {
- case 0: return QColor(0,0,0);
- case 1: return QColor(0,0,0);
- case 2: return QColor(0,0,0);
- case 3: return QColor(0,0,0);
- case 4: return QColor(0,0,0);
- case 5: return QColor(0,0,0);
- case 6: return QColor(0,0,0);
- case 7: return QColor(0,0,0);
- }
-
- return QColor(0,0,0);
-}
-
-void tst_QDataStream::stream_QColor_data()
-{
- stream_data(8);
-}
-
-void tst_QDataStream::stream_QColor()
-{
- STREAM_IMPL(QColor);
-}
-
-void tst_QDataStream::writeQColor(QDataStream *s)
-{
- QColor d3(QColorData(dataIndex(QTest::currentDataTag())));
- *s << d3;
-}
-
-void tst_QDataStream::readQColor(QDataStream *s)
-{
- QColor test(QColorData(dataIndex(QTest::currentDataTag())));
- QColor d3;
- *s >> d3;
- QCOMPARE(d3, test);
-}
-
-
-// ************************************
-
-static QByteArray qByteArrayData(int index)
-{
- switch (index) {
- case 0: return QByteArray();
- case 1: return QByteArray("");
- case 2: return QByteArray("foo");
- case 3: return QByteArray("foo bar");
- case 4: return QByteArray("two\nlines");
- case 5: return QByteArray("ABCDEFG");
- case 6: return QByteArray("baec zxv 123"); // kept for nostalgic reasons
- case 7: return QByteArray("jbc;UBC;jd clhdbcahd vcbd vgdv dhvb laifv kadf jkhfbvljd khd lhvjh ");
- }
-
- return QByteArray("foo");
-}
-
-void tst_QDataStream::stream_QByteArray_data()
-{
- stream_data(8);
-}
-
-void tst_QDataStream::stream_QByteArray()
-{
- STREAM_IMPL(QByteArray);
-}
-
-void tst_QDataStream::writeQByteArray(QDataStream *s)
-{
- QByteArray d4(qByteArrayData(dataIndex(QTest::currentDataTag())));
- *s << d4;
-}
-
-void tst_QDataStream::writenullptr_t(QDataStream *s)
-{
- *s << nullptr;
-}
-
-void tst_QDataStream::readQByteArray(QDataStream *s)
-{
- QByteArray test(qByteArrayData(dataIndex(QTest::currentDataTag())));
- QByteArray d4;
- *s >> d4;
- QCOMPARE(d4, test);
-}
-
-void tst_QDataStream::readnullptr_t(QDataStream *s)
-{
- std::nullptr_t ptr;
- *s >> ptr;
- QCOMPARE(ptr, nullptr);
-}
-
-// ************************************
-#ifndef QT_NO_CURSOR
-static QCursor qCursorData(int index)
-{
- switch (index) {
- case 0: return QCursor(Qt::ArrowCursor);
- case 1: return QCursor(Qt::WaitCursor);
- case 2: return QCursor(Qt::BitmapCursor);
- case 3: return QCursor(Qt::BlankCursor);
- case 4: return QCursor(Qt::BlankCursor);
- case 5: return QCursor(QPixmap(open_xpm), 1, 1);
- case 6: { QPixmap pm(open_xpm); return QCursor(QBitmap(pm), pm.mask(), 3, 4); }
- case 7: return QCursor(QPixmap(open_xpm), -1, 5);
- case 8: return QCursor(QPixmap(open_xpm), 5, -1);
- }
-
- return QCursor();
-}
-#endif
-
-#ifndef QT_NO_CURSOR
-void tst_QDataStream::stream_QCursor_data()
-{
- stream_data(9);
-}
-#endif
-
-#ifndef QT_NO_CURSOR
-void tst_QDataStream::stream_QCursor()
-{
- STREAM_IMPL(QCursor);
-}
-#endif
-
-#ifndef QT_NO_CURSOR
-void tst_QDataStream::writeQCursor(QDataStream *s)
-{
- QCursor d5(qCursorData(dataIndex(QTest::currentDataTag())));
- *s << d5;
-}
-#endif
-
-#ifndef QT_NO_CURSOR
-void tst_QDataStream::readQCursor(QDataStream *s)
-{
- QCursor test(qCursorData(dataIndex(QTest::currentDataTag())));
- QCursor d5;
- *s >> d5;
-
- QVERIFY(d5.shape() == test.shape()); //## lacks operator==
- QCOMPARE(d5.hotSpot(), test.hotSpot());
- QVERIFY((d5.bitmap() != 0 && test.bitmap() != 0) || (d5.bitmap() == 0 && test.bitmap() == 0));
- if (d5.bitmap() != 0) {
- QPixmap actual = *(d5.bitmap());
- QPixmap expected = *(test.bitmap());
- QCOMPARE(actual, expected);
- }
- QVERIFY((d5.mask() != 0 && test.mask() != 0) || (d5.mask() == 0 && test.mask() == 0));
- if (d5.mask() != 0) {
- QPixmap actual = *(d5.mask());
- QPixmap expected = *(test.mask());
- QCOMPARE(actual, expected);
- }
-}
-#endif
-
-// ************************************
-
-static QDate qDateData(int index)
-{
- switch (index) {
- case 0: return QDate(1752, 9, 14); // the first valid date
- case 1: return QDate(1900, 1, 1);
- case 2: return QDate(1976, 4, 5);
- case 3: return QDate(1960, 5, 27);
- case 4: return QDate(1999, 12, 31); // w2k effects?
- case 5: return QDate(2000, 1, 1);
- case 6: return QDate(2050, 1, 1);// test some values far in the future too
- case 7: return QDate(3001, 12, 31);
- case 8: return QDate(4002, 1, 1);
- case 9: return QDate(4003, 12, 31);
- case 10: return QDate(5004, 1, 1);
- case 11: return QDate(5005, 12, 31);
- case 12: return QDate(6006, 1, 1);
- case 13: return QDate(6007, 12, 31);
- case 14: return QDate(7008, 1, 1);
- case 15: return QDate(7009, 12, 31);
- }
- return QDate();
-}
-#define MAX_QDATE_DATA 16
-
-void tst_QDataStream::stream_QDate_data()
-{
- stream_data(MAX_QDATE_DATA);
-}
-
-void tst_QDataStream::stream_QDate()
-{
- STREAM_IMPL(QDate);
-}
-
-void tst_QDataStream::writeQDate(QDataStream *s)
-{
- QDate d6(qDateData(dataIndex(QTest::currentDataTag())));
- *s << d6;
-}
-
-void tst_QDataStream::readQDate(QDataStream *s)
-{
- QDate test(qDateData(dataIndex(QTest::currentDataTag())));
- QDate d6;
- *s >> d6;
- QCOMPARE(d6, test);
-}
-
-// ************************************
-
-static QTime qTimeData(int index)
-{
- switch (index) {
- case 0 : return QTime(0, 0, 0, 0);
- case 1 : return QTime(0, 0, 0, 1);
- case 2 : return QTime(0, 0, 0, 99);
- case 3 : return QTime(0, 0, 0, 100);
- case 4 : return QTime(0, 0, 0, 999);
- case 5 : return QTime(0, 0, 1, 0);
- case 6 : return QTime(0, 0, 1, 1);
- case 7 : return QTime(0, 0, 1, 99);
- case 8 : return QTime(0, 0, 1, 100);
- case 9 : return QTime(0, 0, 1, 999);
- case 10: return QTime(0, 0, 59, 0);
- case 11: return QTime(0, 0, 59, 1);
- case 12: return QTime(0, 0, 59, 99);
- case 13: return QTime(0, 0, 59, 100);
- case 14: return QTime(0, 0, 59, 999);
- case 15: return QTime(0, 59, 0, 0);
- case 16: return QTime(0, 59, 0, 1);
- case 17: return QTime(0, 59, 0, 99);
- case 18: return QTime(0, 59, 0, 100);
- case 19: return QTime(0, 59, 0, 999);
- case 20: return QTime(0, 59, 1, 0);
- case 21: return QTime(0, 59, 1, 1);
- case 22: return QTime(0, 59, 1, 99);
- case 23: return QTime(0, 59, 1, 100);
- case 24: return QTime(0, 59, 1, 999);
- case 25: return QTime(0, 59, 59, 0);
- case 26: return QTime(0, 59, 59, 1);
- case 27: return QTime(0, 59, 59, 99);
- case 28: return QTime(0, 59, 59, 100);
- case 29: return QTime(0, 59, 59, 999);
- case 30: return QTime(23, 0, 0, 0);
- case 31: return QTime(23, 0, 0, 1);
- case 32: return QTime(23, 0, 0, 99);
- case 33: return QTime(23, 0, 0, 100);
- case 34: return QTime(23, 0, 0, 999);
- case 35: return QTime(23, 0, 1, 0);
- case 36: return QTime(23, 0, 1, 1);
- case 37: return QTime(23, 0, 1, 99);
- case 38: return QTime(23, 0, 1, 100);
- case 39: return QTime(23, 0, 1, 999);
- case 40: return QTime(23, 0, 59, 0);
- case 41: return QTime(23, 0, 59, 1);
- case 42: return QTime(23, 0, 59, 99);
- case 43: return QTime(23, 0, 59, 100);
- case 44: return QTime(23, 0, 59, 999);
- case 45: return QTime(23, 59, 0, 0);
- case 46: return QTime(23, 59, 0, 1);
- case 47: return QTime(23, 59, 0, 99);
- case 48: return QTime(23, 59, 0, 100);
- case 49: return QTime(23, 59, 0, 999);
- case 50: return QTime(23, 59, 1, 0);
- case 51: return QTime(23, 59, 1, 1);
- case 52: return QTime(23, 59, 1, 99);
- case 53: return QTime(23, 59, 1, 100);
- case 54: return QTime(23, 59, 1, 999);
- case 55: return QTime(23, 59, 59, 0);
- case 56: return QTime(23, 59, 59, 1);
- case 57: return QTime(23, 59, 59, 99);
- case 58: return QTime(23, 59, 59, 100);
- case 59: return QTime(23, 59, 59, 999);
- case 60: return QTime();
- }
- return QTime(0, 0, 0);
-}
-#define MAX_QTIME_DATA 61
-
-void tst_QDataStream::stream_QTime_data()
-{
- stream_data(MAX_QTIME_DATA);
-}
-
-void tst_QDataStream::stream_QTime()
-{
- STREAM_IMPL(QTime);
-}
-
-void tst_QDataStream::writeQTime(QDataStream *s)
-{
- QTime d7 = qTimeData(dataIndex(QTest::currentDataTag()));
- *s << d7;
-}
-
-void tst_QDataStream::readQTime(QDataStream *s)
-{
- QTime test = qTimeData(dataIndex(QTest::currentDataTag()));
- QTime d7;
- *s >> d7;
- QCOMPARE(d7, test);
-}
-
-// ************************************
-
-static QDateTime qDateTimeData(int index)
-{
- switch (index) {
- case 0: return QDateTime(QDate(1900, 1, 1), QTime(0,0,0,0));
- case 1: return QDateTime(QDate(1900, 1, 2), QTime(1,1,1,1));
- case 2: return QDateTime(QDate(1900, 1, 3), QTime(12,0,0,0));
- case 3: return QDateTime(QDate(1900, 1, 4), QTime(23,59,59,999));
- case 4: return QDateTime(QDate(1999, 1, 1), QTime(0,0,0,0));
- case 5: return QDateTime(QDate(1999, 1, 2), QTime(1,1,1,1));
- case 6: return QDateTime(QDate(1999, 1, 3), QTime(12,0,0,0));
- case 7: return QDateTime(QDate(1999, 1, 4), QTime(23,59,59,999));
- case 8: return QDateTime(QDate(2000, 1, 1), QTime(0,0,0,0));
- case 9: return QDateTime(QDate(2000, 1, 2), QTime(1,1,1,1));
- case 10: return QDateTime(QDate(2000, 1, 3), QTime(12,0,0,0));
- case 11: return QDateTime(QDate(2000, 1, 4), QTime(23,59,59,999));
- case 12: return QDateTime(QDate(2000, 12, 31), QTime(0,0,0,0));
- case 13: return QDateTime(QDate(2000, 12, 31), QTime(1,1,1,1));
- case 14: return QDateTime(QDate(2000, 12, 31), QTime(12,0,0,0));
- case 15: return QDateTime(QDate(2000, 12, 31), QTime(23,59,59,999));
- }
- return QDateTime(QDate(1900, 1, 1), QTime(0,0,0));
-}
-#define MAX_QDATETIME_DATA 16
-
-void tst_QDataStream::stream_QDateTime_data()
-{
- stream_data(MAX_QDATETIME_DATA);
-}
-
-void tst_QDataStream::stream_QDateTime()
-{
- STREAM_IMPL(QDateTime);
-}
-
-void tst_QDataStream::stream_nullptr_t_data()
-{
- stream_data(1); // there's only one value possible
-}
-
-void tst_QDataStream::stream_nullptr_t()
-{
- using namespace std;
- STREAM_IMPL(nullptr_t);
-}
-
-void tst_QDataStream::writeQDateTime(QDataStream *s)
-{
- QDateTime dt(qDateTimeData(dataIndex(QTest::currentDataTag())));
- *s << dt;
-}
-
-void tst_QDataStream::readQDateTime(QDataStream *s)
-{
- QDateTime test(qDateTimeData(dataIndex(QTest::currentDataTag())));
- QDateTime d8;
- *s >> d8;
- QCOMPARE(d8, test);
-}
-
-// ************************************
-
-static QFont qFontData(int index)
-{
- switch (index) {
- case 0: return QFont("Courier", 20, QFont::Bold, true);
- case 1: return QFont("Courier", 18, QFont::Bold, false);
- case 2: return QFont("Courier", 16, QFont::Light, true);
- case 3: return QFont("Courier", 14, QFont::Normal, false);
- case 4: return QFont("Courier", 12, QFont::DemiBold, true);
- case 5: return QFont("Courier", 10, QFont::Black, false);
- case 6:
- {
- QFont f("Helvetica", 10, QFont::Normal, false);
- f.setPixelSize(2);
- f.setUnderline(false);
- f.setStrikeOut(false);
- f.setFixedPitch(false);
- return f;
- }
- case 7:
- {
- QFont f("Helvetica", 10, QFont::Bold, false);
- f.setPixelSize(4);
- f.setUnderline(true);
- f.setStrikeOut(false);
- f.setFixedPitch(false);
- return f;
- }
- case 8:
- {
- QFont f("Helvetica", 10, QFont::Light, false);
- f.setPixelSize(6);
- f.setUnderline(false);
- f.setStrikeOut(true);
- f.setFixedPitch(false);
- return f;
- }
- case 9:
- {
- QFont f("Helvetica", 10, QFont::DemiBold, false);
- f.setPixelSize(8);
- f.setUnderline(false);
- f.setStrikeOut(false);
- f.setFixedPitch(true);
- return f;
- }
- case 10:
- {
- QFont f("Helvetica", 10, QFont::Black, false);
- f.setPixelSize(10);
- f.setUnderline(true);
- f.setStrikeOut(true);
- f.setFixedPitch(false);
- return f;
- }
- case 11:
- {
- QFont f("Helvetica", 10, QFont::Normal, true);
- f.setPixelSize(12);
- f.setUnderline(false);
- f.setStrikeOut(true);
- f.setFixedPitch(true);
- return f;
- }
- case 12:
- {
- QFont f("Helvetica", 10, QFont::Bold, true);
- f.setPixelSize(14);
- f.setUnderline(true);
- f.setStrikeOut(true);
- f.setFixedPitch(true);
- return f;
- }
- case 13:
- {
- QFont f("Helvetica", 10, QFont::Bold, true);
- f.setStretch(200);
- return f;
- }
- }
- return QFont("Courier", 18, QFont::Bold, true);
-}
-#define MAX_QFONT_DATA 14
-
-void tst_QDataStream::stream_QFont_data()
-{
- stream_data(MAX_QFONT_DATA);
-}
-
-void tst_QDataStream::stream_QFont()
-{
- STREAM_IMPL(QFont);
-}
-
-void tst_QDataStream::writeQFont(QDataStream *s)
-{
- QFont d9(qFontData(dataIndex(QTest::currentDataTag())));
- *s << d9;
-}
-
-void tst_QDataStream::readQFont(QDataStream *s)
-{
- QFont test(qFontData(dataIndex(QTest::currentDataTag())));
- QFont d9;
- *s >> d9;
-
- // maybe a bit overkill ...
- QCOMPARE(d9.family(), test.family());
- QCOMPARE(d9.pointSize(), test.pointSize());
- QCOMPARE(d9.pixelSize(), test.pixelSize());
- QCOMPARE(d9.weight(), test.weight());
- QCOMPARE(d9.bold(), test.bold());
- QCOMPARE(d9.italic(), test.italic());
- QCOMPARE(d9.underline(), test.underline());
- QCOMPARE(d9.overline(), test.overline());
- QCOMPARE(d9.strikeOut(), test.strikeOut());
- QCOMPARE(d9.fixedPitch(), test.fixedPitch());
- QCOMPARE(d9.styleHint(), test.styleHint());
- QCOMPARE(d9.toString(), test.toString());
-
- QCOMPARE(d9, test);
-}
-
-// ************************************
-
-void tst_QDataStream::stream_QImage_data()
-{
- stream_data(1);
-}
-
-void tst_QDataStream::stream_QImage()
-{
- STREAM_IMPL(QImage);
-}
-
-void tst_QDataStream::writeQImage(QDataStream *s)
-{
- QImage d12(open_xpm);
- *s << d12;
-}
-
-void tst_QDataStream::readQImage(QDataStream *s)
-{
- QImage ref(open_xpm);
-
- QImage d12;
- *s >> d12;
- QCOMPARE(d12, ref);
-
- // do some extra neurotic tests
- QCOMPARE(d12.size(), ref.size());
- QCOMPARE(d12.isNull(), ref.isNull());
- QCOMPARE(d12.width(), ref.width());
- QCOMPARE(d12.height(), ref.height());
- QCOMPARE(d12.depth(), ref.depth());
- QCOMPARE(d12.colorCount(), ref.colorCount());
- QCOMPARE(d12.hasAlphaChannel(), ref.hasAlphaChannel());
-}
-
-// ************************************
-
-static QPen qPenData(int index)
-{
- switch (index) {
- case 0:
- {
- QPen p(Qt::blue, 0, Qt::NoPen);
- p.setCapStyle(Qt::FlatCap);
- p.setJoinStyle(Qt::MiterJoin);
- return p;
- }
- case 1:
- {
- QPen p(Qt::red, 1, Qt::SolidLine);
- p.setCapStyle(Qt::SquareCap);
- p.setJoinStyle(Qt::BevelJoin);
- return p;
- }
- case 2:
- {
- QPen p(Qt::red, 4, Qt::DashDotDotLine);
- p.setCapStyle(Qt::RoundCap);
- p.setJoinStyle(Qt::RoundJoin);
- return p;
- }
- case 3:
- {
- QPen p(Qt::blue, 12, Qt::NoPen);
- p.setCapStyle(Qt::FlatCap);
- p.setJoinStyle(Qt::RoundJoin);
- return p;
- }
- case 4:
- {
- QPen p(Qt::red, 99, Qt::SolidLine);
- p.setCapStyle(Qt::SquareCap);
- p.setJoinStyle(Qt::MiterJoin);
- return p;
- }
- case 5:
- {
- QPen p(Qt::red, 255, Qt::DashDotLine);
- p.setCapStyle(Qt::RoundCap);
- p.setJoinStyle(Qt::BevelJoin);
- return p;
- }
- case 6:
- {
- QPen p(Qt::red, 256, Qt::DashDotLine);
- p.setCapStyle(Qt::RoundCap);
- p.setJoinStyle(Qt::BevelJoin);
- return p;
- }
- case 7:
- {
- QPen p(Qt::red, 0.25, Qt::DashDotLine);
- p.setCapStyle(Qt::RoundCap);
- p.setJoinStyle(Qt::BevelJoin);
- return p;
- }
- }
-
- return QPen();
-}
-#define MAX_QPEN_DATA 8
-
-void tst_QDataStream::stream_QPen_data()
-{
- stream_data(MAX_QPEN_DATA);
-}
-
-void tst_QDataStream::stream_QPen()
-{
- STREAM_IMPL(QPen);
-}
-
-void tst_QDataStream::writeQPen(QDataStream *s)
-{
- QPen d15(qPenData(dataIndex(QTest::currentDataTag())));
- *s << d15;
-}
-
-void tst_QDataStream::readQPen(QDataStream *s)
-{
- QPen origPen(qPenData(dataIndex(QTest::currentDataTag())));
- QPen d15;
- *s >> d15;
- QCOMPARE(d15.style(), origPen.style());
- QCOMPARE(d15.width(), origPen.width());
- QCOMPARE(d15.color(), origPen.color());
- QCOMPARE(d15.capStyle(), origPen.capStyle());
- QCOMPARE(d15.joinStyle(), origPen.joinStyle());
- QCOMPARE(d15, origPen);
-}
-
-// ************************************
-
-// pixmap testing is currently limited to one pixmap only.
-//
-void tst_QDataStream::stream_QPixmap_data()
-{
- stream_data(1);
-}
-
-void tst_QDataStream::stream_QPixmap()
-{
- STREAM_IMPL(QPixmap);
-}
-
-void tst_QDataStream::stream_QIcon_data()
-{
- stream_data(1);
-}
-
-void tst_QDataStream::stream_QIcon()
-{
- STREAM_IMPL(QIcon);
-}
-
-void tst_QDataStream::writeQPixmap(QDataStream *s)
-{
- QPixmap d16(open_xpm);
- *s << d16;
-}
-
-void tst_QDataStream::readQPixmap(QDataStream *s)
-{
- QPixmap pm(open_xpm);
- QPixmap d16;
- *s >> d16;
- QVERIFY(!d16.isNull() && !pm.isNull());
- QCOMPARE(d16.width(), pm.width());
- QCOMPARE(d16.height(), pm.height());
- QCOMPARE(d16.size(), pm.size());
- QCOMPARE(d16.rect(), pm.rect());
- QCOMPARE(d16.depth(), pm.depth());
-}
-
-void tst_QDataStream::writeQIcon(QDataStream *s)
-{
- QPixmap pm(open_xpm);
- QIcon d16(pm);
- *s << d16;
-}
-
-void tst_QDataStream::readQIcon(QDataStream *s)
-{
- QPixmap pm(open_xpm);
- QIcon icon(pm);
- QIcon d16;
- *s >> d16;
- QVERIFY(!d16.isNull() && !icon.isNull());
- QCOMPARE(d16.pixmap(100), pm);
-}
-
-// ************************************
-
-QPoint qPointData(int index)
-{
- switch (index) {
- case 0: return QPoint(0, 0);
- case 1: return QPoint(-1, 0);
- case 2: return QPoint(0, -1);
- case 3: return QPoint(1, 0);
- case 4: return QPoint(0, 1);
- case 5: return QPoint(-1, -1);
- case 6: return QPoint(1, 1);
- case 7: return QPoint(255, 255);
- case 8: return QPoint(256, 256);
- case 9: return QPoint(-254, -254);
- case 10: return QPoint(-255, -255);
- }
-
- return QPoint();
-}
-#define MAX_QPOINT_DATA 11
-
-
-void tst_QDataStream::stream_QPoint_data()
-{
- stream_data(MAX_QPOINT_DATA);
-}
-
-void tst_QDataStream::stream_QPoint()
-{
- STREAM_IMPL(QPoint);
-}
-
-void tst_QDataStream::writeQPoint(QDataStream *s)
-{
- QPoint d17(qPointData(dataIndex(QTest::currentDataTag())));
- *s << d17;
-
- QPointF d17f = d17;
- *s << d17f;
-}
-
-void tst_QDataStream::readQPoint(QDataStream *s)
-{
- QPoint ref(qPointData(dataIndex(QTest::currentDataTag())));
- QPoint d17;
- *s >> d17;
- QCOMPARE(d17, ref);
-
- QPointF d17f;
- *s >> d17f;
- QCOMPARE(d17f, QPointF(ref));
-}
-
-// ************************************
-
-static QRect qRectData(int index)
-{
- switch (index) {
- case 0: return QRect(0, 0, 0, 0);
- case 1: return QRect(1, 1, 1, 1);
- case 2: return QRect(1, 2, 3, 4);
- case 3: return QRect(-1, -1, -1, -1);
- case 4: return QRect(-1, -2, -3, -4);
- case 5: return QRect(255, -5, 256, -6);
- case 6: return QRect(-7, 255, -8, 256);
- case 7: return QRect(9, -255, 10, -255);
- case 8: return QRect(-255, 11, -255, 12);
- case 9: return QRect(256, 512, 1024, 2048);
- case 10: return QRect(-256, -512, -1024, -2048);
- }
- return QRect();
-}
-#define MAX_QRECT_DATA 11
-
-void tst_QDataStream::stream_QRect_data()
-{
- stream_data(MAX_QRECT_DATA);
-}
-
-void tst_QDataStream::stream_QRect()
-{
- STREAM_IMPL(QRect);
-}
-
-void tst_QDataStream::writeQRect(QDataStream *s)
-{
- QRect d18(qRectData(dataIndex(QTest::currentDataTag())));
- *s << d18;
-
- QRectF d18f(d18);
- *s << d18f;
-}
-
-void tst_QDataStream::readQRect(QDataStream *s)
-{
- QRect ref(qRectData(dataIndex(QTest::currentDataTag())));
- QRect d18;
- *s >> d18;
- QCOMPARE(d18, ref);
-
- QRectF d18f;
- *s >> d18f;
- QCOMPARE(d18f, QRectF(ref));
-}
-
-// ************************************
-
-static QPolygon qPolygonData(int index)
-{
- QPoint p0(0, 0);
- QPoint p1(1, 1);
- QPoint p2(-1, -1);
- QPoint p3(1, -1);
- QPoint p4(-1, 1);
- QPoint p5(0, 255);
- QPoint p6(0, 256);
- QPoint p7(0, 1024);
- QPoint p8(255, 0);
- QPoint p9(256, 0);
- QPoint p10(1024, 0);
- QPoint p11(345, 678);
- QPoint p12(23456, 99999);
- QPoint p13(-99998, -34567);
- QPoint p14(45678, -99999);
-
- switch (index) {
- case 0:
- return QPolygon(0);
- case 1:
- {
- QPolygon p(1);
- p.setPoint(0, p0);
- return p;
- }
- case 2:
- {
- QPolygon p(1);
- p.setPoint(0, p5);
- return p;
- }
- case 3:
- {
- QPolygon p(1);
- p.setPoint(0, p12);
- return p;
- }
- case 4:
- {
- QPolygon p(3);
- p.setPoint(0, p1);
- p.setPoint(1, p10);
- p.setPoint(2, p13);
- return p;
- }
- case 5:
- {
- QPolygon p(6);
- p.setPoint(0, p2);
- p.setPoint(1, p11);
- p.setPoint(2, p14);
- return p;
- }
- case 6:
- {
- QPolygon p(15);
- p.setPoint(0, p0);
- p.setPoint(1, p1);
- p.setPoint(2, p2);
- p.setPoint(3, p3);
- p.setPoint(4, p4);
- p.setPoint(5, p5);
- p.setPoint(6, p6);
- p.setPoint(7, p7);
- p.setPoint(8, p8);
- p.setPoint(9, p9);
- p.setPoint(10, p10);
- p.setPoint(11, p11);
- p.setPoint(12, p12);
- p.setPoint(13, p13);
- p.setPoint(14, p14);
- return p;
- }
- }
- return QRect();
-}
-#define MAX_QPOINTARRAY_DATA 7
-
-void tst_QDataStream::stream_QPolygon_data()
-{
- stream_data(1);
-}
-
-void tst_QDataStream::stream_QPolygon()
-{
- STREAM_IMPL(QPolygon);
-}
-
-void tst_QDataStream::writeQPolygon(QDataStream *s)
-{
- QPolygon d19(qPolygonData(dataIndex(QTest::currentDataTag())));
- *s << d19;
-
- QPolygonF d19f(d19);
- *s << d19f;
-}
-
-void tst_QDataStream::readQPolygon(QDataStream *s)
-{
- QPolygon ref(qPolygonData(dataIndex(QTest::currentDataTag())));
- QPolygon d19;
- *s >> d19;
- QCOMPARE(d19, ref);
-
- QPolygonF d19f;
- *s >> d19f;
- QCOMPARE(d19f, QPolygonF(ref));
-}
-
-// ************************************
-
-static QRegion qRegionData(int index)
-{
- switch (index) {
- case 0: return QRegion(0, 0, 0, 0, QRegion::Rectangle);
- case 1:
- {
- QRegion r(1, 2, 300, 400, QRegion::Rectangle);
- if (r != QRegion(1, 2, 300, 400, QRegion::Rectangle))
- qDebug("Error creating a region");
- return r;
- }
- case 2: return QRegion(100, 100, 1024, 768, QRegion::Rectangle);
- case 3: return QRegion(-100, -100, 1024, 1024, QRegion::Rectangle);
- case 4: return QRegion(100, -100, 2048, 4096, QRegion::Rectangle);
- case 5: return QRegion(-100, 100, 4096, 2048, QRegion::Rectangle);
- case 6: return QRegion(0, 0, 0, 0, QRegion::Ellipse);
-#if !defined(Q_OS_UNIX) // all our Unix platforms use X regions.
- case 7: return QRegion(1, 2, 300, 400, QRegion::Ellipse);
- case 8: return QRegion(100, 100, 1024, 768, QRegion::Ellipse);
- case 9: return QRegion(-100, -100, 1024, 1024, QRegion::Ellipse);
- case 10: return QRegion(100, -100, 2048, 4096, QRegion::Ellipse);
- case 11: return QRegion(-100, 100, 4096, 2048, QRegion::Ellipse);
- // simplest X11 case that fails:
- case 12: return QRegion(0, 0, 3, 3, QRegion::Ellipse);
-#else
- case 7:
- qWarning("Skipping streaming of elliptical regions on embedded, OS X, and X11;"
- " our pointarray stuff is not that great at approximating.");
-#endif
- }
- return QRegion();
-}
-#define MAX_QREGION_DATA 12
-
-void tst_QDataStream::stream_QRegion_data()
-{
- stream_data(MAX_QREGION_DATA);
-}
-
-void tst_QDataStream::stream_QRegion()
-{
- STREAM_IMPL(QRegion);
-}
-
-void tst_QDataStream::writeQRegion(QDataStream *s)
-{
- QRegion r(qRegionData(dataIndex(QTest::currentDataTag())));
- *s << r;
-}
-
-void tst_QDataStream::readQRegion(QDataStream *s)
-{
- QRegion ref(qRegionData(dataIndex(QTest::currentDataTag())));
- QRegion r;
- *s >> r;
- QCOMPARE(r, ref);
-}
-
-// ************************************
-
-static QSize qSizeData(int index)
-{
- switch (index) {
- case 0: return QSize(0, 0);
- case 1: return QSize(-1, 0);
- case 2: return QSize(0, -1);
- case 3: return QSize(1, 0);
- case 4: return QSize(0, 1);
- case 5: return QSize(-1, -1);
- case 6: return QSize(1, 1);
- case 7: return QSize(255, 255);
- case 8: return QSize(256, 256);
- case 9: return QSize(-254, -254);
- case 10: return QSize(-255, -255);
- }
- return QSize();
-}
-#define MAX_QSIZE_DATA 11
-
-void tst_QDataStream::stream_QSize_data()
-{
- stream_data(MAX_QSIZE_DATA);
-}
-
-void tst_QDataStream::stream_QSize()
-{
- STREAM_IMPL(QSize);
-}
-
-void tst_QDataStream::writeQSize(QDataStream *s)
-{
- QSize d21(qSizeData(dataIndex(QTest::currentDataTag())));
- *s << d21;
-
- QSizeF d21f(d21);
- *s << d21f;
-}
-
-void tst_QDataStream::readQSize(QDataStream *s)
-{
- QSize ref(qSizeData(dataIndex(QTest::currentDataTag())));
- QSize d21;
- *s >> d21;
- QCOMPARE(d21, ref);
-
- QSizeF d21f;
- *s >> d21f;
- QCOMPARE(d21f, QSizeF(ref));
-}
-
-// *********************** atEnd ******************************
-
-void tst_QDataStream::stream_atEnd_data()
-{
- stream_data(MAX_QSTRING_DATA);
-}
-
-void tst_QDataStream::stream_atEnd()
-{
- QFETCH(QString, device);
- if (device == "bytearray") {
- QByteArray ba;
- QDataStream sout(&ba, QIODevice::WriteOnly);
- writeQString(&sout);
-
- QDataStream sin(&ba, QIODevice::ReadOnly);
- readQString(&sin);
- QVERIFY(sin.atEnd());
- } else if (device == "file") {
- QString fileName = "qdatastream.out";
- QFile fOut(fileName);
- QVERIFY(fOut.open(QIODevice::WriteOnly));
- QDataStream sout(&fOut);
- writeQString(&sout);
- fOut.close();
-
- QFile fIn(fileName);
- QVERIFY(fIn.open(QIODevice::ReadOnly));
- QDataStream sin(&fIn);
- readQString(&sin);
- QVERIFY(sin.atEnd());
- fIn.close();
- } else if (device == "buffer") {
- {
- QByteArray ba(0);
- QBuffer bOut(&ba);
- bOut.open(QIODevice::WriteOnly);
- QDataStream sout(&bOut);
- writeQString(&sout);
- bOut.close();
-
- QBuffer bIn(&ba);
- bIn.open(QIODevice::ReadOnly);
- QDataStream sin(&bIn);
- readQString(&sin);
- QVERIFY(sin.atEnd());
- bIn.close();
- }
-
- // Do the same test again, but this time with an initial size for the bytearray.
- {
- QByteArray ba(10000, '\0');
- QBuffer bOut(&ba);
- bOut.open(QIODevice::WriteOnly | QIODevice::Truncate);
- QDataStream sout(&bOut);
- writeQString(&sout);
- bOut.close();
-
- QBuffer bIn(&ba);
- bIn.open(QIODevice::ReadOnly);
- QDataStream sin(&bIn);
- readQString(&sin);
- QVERIFY(sin.atEnd());
- bIn.close();
- }
- }
-}
-
-class FakeBuffer : public QBuffer
-{
-protected:
- qint64 writeData(const char *c, qint64 i) { return m_lock ? 0 : QBuffer::writeData(c, i); }
-public:
- FakeBuffer(bool locked = false) : m_lock(locked) {}
- void setLocked(bool locked) { m_lock = locked; }
-private:
- bool m_lock;
-};
-
-#define TEST_WRITE_ERROR(op) \
- { \
- FakeBuffer fb(false); \
- QVERIFY(fb.open(QBuffer::ReadWrite)); \
- QDataStream fs(&fb); \
- fs.writeRawData("hello", 5); \
- /* first write some initial content */ \
- QCOMPARE(fs.status(), QDataStream::Ok); \
- QCOMPARE(fb.data(), QByteArray("hello")); \
- /* then test that writing can cause an error */ \
- fb.setLocked(true); \
- fs op; \
- QCOMPARE(fs.status(), QDataStream::WriteFailed); \
- QCOMPARE(fb.data(), QByteArray("hello")); \
- /* finally test that writing after an error doesn't change the stream any more */ \
- fb.setLocked(false); \
- fs op; \
- QCOMPARE(fs.status(), QDataStream::WriteFailed); \
- QCOMPARE(fb.data(), QByteArray("hello")); \
- }
-
-void tst_QDataStream::stream_writeError()
-{
- TEST_WRITE_ERROR(<< true)
- TEST_WRITE_ERROR(<< (qint8)1)
- TEST_WRITE_ERROR(<< (quint8)1)
- TEST_WRITE_ERROR(<< (qint16)1)
- TEST_WRITE_ERROR(<< (quint16)1)
- TEST_WRITE_ERROR(<< (qint32)1)
- TEST_WRITE_ERROR(<< (quint32)1)
- TEST_WRITE_ERROR(<< (qint64)1)
- TEST_WRITE_ERROR(<< (quint64)1)
- TEST_WRITE_ERROR(<< "hello")
- TEST_WRITE_ERROR(<< (float)1.0)
- TEST_WRITE_ERROR(<< (double)1.0)
- TEST_WRITE_ERROR(.writeRawData("test", 4))
-}
-
-void tst_QDataStream::stream_QByteArray2()
-{
- QByteArray ba;
- {
- QDataStream s(&ba, QIODevice::WriteOnly);
- s << QByteArray("hallo");
- s << QByteArray("");
- s << QByteArray();
- }
-
- {
- QDataStream s(&ba, QIODevice::ReadOnly);
- QByteArray res;
- s >> res;
- QCOMPARE(res, QByteArray("hallo"));
- s >> res;
- QCOMPARE(res, QByteArray(""));
- QVERIFY(res.isEmpty());
- QVERIFY(!res.isNull());
- s >> res;
- QCOMPARE(res, QByteArray());
- QVERIFY(res.isEmpty());
- QVERIFY(res.isNull());
- }
-}
-
-void tst_QDataStream::setVersion_data()
-{
- QTest::addColumn<int>("vers");
- QDataStream latest;
-
- for (int vers = 1; vers <= latest.version(); ++vers)
- QTest::newRow(("v_" + QByteArray::number(vers)).constData()) << vers;
-}
-
-void tst_QDataStream::setVersion()
-{
- QDataStream latest;
- QFETCH(int, vers);
-
- /*
- Test QKeySequence.
- */
- QByteArray ba1;
- {
- QDataStream out(&ba1, QIODevice::WriteOnly);
- out.setVersion(vers);
- out << QKeySequence(Qt::Key_A) << QKeySequence(Qt::Key_B, Qt::Key_C)
- << (quint32)0xDEADBEEF;
- }
- {
- QKeySequence keyseq1, keyseq2;
- quint32 deadbeef;
- QDataStream in(&ba1, QIODevice::ReadOnly);
- in.setVersion(vers);
- in >> keyseq1 >> keyseq2 >> deadbeef;
- QCOMPARE(keyseq1, QKeySequence(Qt::Key_A));
- if (vers >= 5) {
- QVERIFY(keyseq2 == QKeySequence(Qt::Key_B, Qt::Key_C));
- } else {
- QCOMPARE(keyseq2, QKeySequence(Qt::Key_B));
- }
- QCOMPARE(deadbeef, 0xDEADBEEF);
- }
-
- /*
- Test QPalette.
- */
-
- // revise the test if new color roles or color groups are added
- QVERIFY(QPalette::NColorRoles == QPalette::ToolTipText + 1);
- QCOMPARE(int(QPalette::NColorGroups), 3);
-
- QByteArray ba2;
- QPalette pal1, pal2;
- for (int grp = 0; grp < (int)QPalette::NColorGroups; ++grp) {
- for (int role = 0; role < (int)QPalette::NColorRoles; ++role) {
- // random stuff
- pal1.setColor((QPalette::ColorGroup)grp, (QPalette::ColorRole)role,
- QColor(grp * 13, 255 - grp, role));
- pal2.setColor((QPalette::ColorGroup)grp, (QPalette::ColorRole)role,
- QColor(role * 11, 254 - role, grp));
- }
- }
-
- {
- QDataStream out(&ba2, QIODevice::WriteOnly);
- out.setVersion(vers);
- out << pal1 << pal2 << (quint32)0xCAFEBABE;
- }
- {
- QPalette inPal1, inPal2;
- quint32 cafebabe;
- QDataStream in(&ba2, QIODevice::ReadOnly);
- in.setVersion(vers);
- in >> inPal1 >> inPal2;
- in >> cafebabe;
-
- QCOMPARE(cafebabe, 0xCAFEBABE);
-
- QCOMPARE(NColorRoles[latest.version()], (int)QPalette::NColorRoles); //if this fails you need to update the NColorRoles array
-
- if (vers == 1) {
- for (int grp = 0; grp < (int)QPalette::NColorGroups; ++grp) {
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Foreground)
- == inPal1.color((QPalette::ColorGroup)grp, QPalette::Foreground));
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Background)
- == inPal1.color((QPalette::ColorGroup)grp, QPalette::Background));
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Light)
- == inPal1.color((QPalette::ColorGroup)grp, QPalette::Light));
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Dark)
- == inPal1.color((QPalette::ColorGroup)grp, QPalette::Dark));
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Mid)
- == inPal1.color((QPalette::ColorGroup)grp, QPalette::Mid));
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Text)
- == inPal1.color((QPalette::ColorGroup)grp, QPalette::Text));
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Base)
- == inPal1.color((QPalette::ColorGroup)grp, QPalette::Base));
-
- QVERIFY(pal1.color((QPalette::ColorGroup)grp, QPalette::Midlight)
- != inPal1.color((QPalette::ColorGroup)grp, QPalette::Midlight));
- }
- } else {
- if (NColorRoles[vers] < QPalette::NColorRoles) {
- QVERIFY(pal1 != inPal1);
- QVERIFY(pal2 != inPal2);
-
- for (int grp = 0; grp < (int)QPalette::NColorGroups; ++grp) {
- for (int i = NColorRoles[vers]; i < QPalette::NColorRoles; ++i) {
- inPal1.setColor((QPalette::ColorGroup)grp, (QPalette::ColorRole)i,
- pal1.color((QPalette::ColorGroup)grp, (QPalette::ColorRole)i));
- inPal2.setColor((QPalette::ColorGroup)grp, (QPalette::ColorRole)i,
- pal2.color((QPalette::ColorGroup)grp, (QPalette::ColorRole)i));
- }
- }
- }
- QCOMPARE(pal1, inPal1);
- QCOMPARE(pal2, inPal2);
- }
- }
-}
-
-class SequentialBuffer : public QBuffer
-{
-public:
- SequentialBuffer(QByteArray *data) : QBuffer(data) { offset = 0; }
-
- bool isSequential() const { return true; }
- bool seek(qint64 pos) { offset = pos; return QBuffer::seek(pos); }
- qint64 pos() const { return qint64(offset); }
-
-protected:
- qint64 readData(char *data, qint64 maxSize)
- {
- qint64 ret = QBuffer::readData(data, maxSize);
- offset += ret;
- return ret;
- }
-
-private:
- int offset;
-};
-
-void tst_QDataStream::skipRawData_data()
-{
- QTest::addColumn<QString>("deviceType");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<int>("read");
- QTest::addColumn<int>("skip");
- QTest::addColumn<int>("skipped");
- QTest::addColumn<char>("expect");
-
- QByteArray bigData;
- bigData.fill('a', 20000);
- bigData[10001] = 'x';
-
- QTest::newRow("1") << QString("sequential") << QByteArray("abcdefghij") << 3 << 6 << 6 << 'j';
- QTest::newRow("2") << QString("random-access") << QByteArray("abcdefghij") << 3 << 6 << 6 << 'j';
- QTest::newRow("3") << QString("sequential") << bigData << 1 << 10000 << 10000 << 'x';
- QTest::newRow("4") << QString("random-access") << bigData << 1 << 10000 << 10000 << 'x';
- QTest::newRow("5") << QString("sequential") << bigData << 1 << 20000 << 19999 << '\0';
- QTest::newRow("6") << QString("random-access") << bigData << 1 << 20000 << 19999 << '\0';
-}
-
-void tst_QDataStream::skipRawData()
-{
- QFETCH(QString, deviceType);
- QFETCH(QByteArray, data);
- QFETCH(int, read);
- QFETCH(int, skip);
- QFETCH(int, skipped);
- QFETCH(char, expect);
- qint8 dummy;
-
- QIODevice *dev = 0;
- if (deviceType == "sequential") {
- dev = new SequentialBuffer(&data);
- } else if (deviceType == "random-access") {
- dev = new QBuffer(&data);
- }
- QVERIFY(dev);
- dev->open(QIODevice::ReadOnly);
-
- QDataStream in(dev);
- for (int i = 0; i < read; ++i)
- in >> dummy;
-
- QCOMPARE(in.skipRawData(skip), skipped);
- in >> dummy;
- QCOMPARE((char)dummy, expect);
-
- delete dev;
-}
-
-#define TEST_qint(T, UT) \
- void tst_QDataStream::status_##T() \
- { \
- QFETCH(QByteArray, bigEndianData); \
- QFETCH(QByteArray, littleEndianData); \
- QFETCH(int, expectedStatus); \
- QFETCH(qint64, expectedValue); \
- \
- { \
- QDataStream stream(&bigEndianData, QIODevice::ReadOnly); \
- T i; \
- stream >> i; \
- QCOMPARE((int) stream.status(), expectedStatus); \
- QCOMPARE(i, (T) expectedValue); \
- } \
- { \
- QDataStream stream(&bigEndianData, QIODevice::ReadOnly); \
- UT i; \
- stream >> i; \
- QCOMPARE((int) stream.status(), expectedStatus); \
- QCOMPARE((T) i, (T) expectedValue); \
- } \
- { \
- QDataStream stream(&littleEndianData, QIODevice::ReadOnly); \
- stream.setByteOrder(QDataStream::LittleEndian); \
- T i; \
- stream >> i; \
- QCOMPARE((int) stream.status(), expectedStatus); \
- QCOMPARE(i, (T) expectedValue); \
- } \
- { \
- QDataStream stream(&littleEndianData, QIODevice::ReadOnly); \
- stream.setByteOrder(QDataStream::LittleEndian); \
- UT i; \
- stream >> i; \
- QCOMPARE((int) stream.status(), expectedStatus); \
- QCOMPARE((T) i, (T) expectedValue); \
- } \
- }
-
-#define TEST_FLOAT(T) \
- void tst_QDataStream::status_##T() \
- { \
- QFETCH(QByteArray, bigEndianData); \
- QFETCH(QByteArray, littleEndianData); \
- QFETCH(int, expectedStatus); \
- QFETCH(double, expectedValue); \
- \
- QDataStream::FloatingPointPrecision prec = sizeof(T) == sizeof(double) ? QDataStream::DoublePrecision : QDataStream::SinglePrecision; \
- \
- { \
- QDataStream stream(&bigEndianData, QIODevice::ReadOnly); \
- stream.setFloatingPointPrecision(prec); \
- T i; \
- stream >> i; \
- QCOMPARE((int) stream.status(), expectedStatus); \
- QCOMPARE((float) i, (float) expectedValue); \
- } \
- { \
- QDataStream stream(&littleEndianData, QIODevice::ReadOnly); \
- stream.setByteOrder(QDataStream::LittleEndian); \
- stream.setFloatingPointPrecision(prec); \
- T i; \
- stream >> i; \
- QCOMPARE((int) stream.status(), expectedStatus); \
- QCOMPARE((float) i, (float) expectedValue); \
- } \
- }
-
-void tst_QDataStream::status_qint8_data()
-{
- QTest::addColumn<QByteArray>("bigEndianData");
- QTest::addColumn<QByteArray>("littleEndianData");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<qint64>("expectedValue");
-
- // ok
- QTest::newRow("0") << QByteArray(1, '\x0') << QByteArray(1, '\x0') << (int) QDataStream::Ok << qint64(0);
- QTest::newRow("-1") << QByteArray(1, '\xff') << QByteArray(1, '\xff') << (int) QDataStream::Ok << qint64(-1);
- QTest::newRow("1") << QByteArray(1, '\x01') << QByteArray(1, '\x01') << (int) QDataStream::Ok << qint64(1);
- QTest::newRow("37") << QByteArray(1, '\x25') << QByteArray(1, '\x25') << (int) QDataStream::Ok << qint64(37);
- QTest::newRow("37j") << QByteArray("\x25j") << QByteArray("\x25j") << (int) QDataStream::Ok << qint64(37);
-
- // past end
- QTest::newRow("empty") << QByteArray() << QByteArray() << (int) QDataStream::ReadPastEnd << qint64(0);
-}
-
-TEST_qint(qint8, quint8)
-
-void tst_QDataStream::status_qint16_data()
-{
- QTest::addColumn<QByteArray>("bigEndianData");
- QTest::addColumn<QByteArray>("littleEndianData");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<qint64>("expectedValue");
-
- // ok
- QTest::newRow("0") << QByteArray(2, '\x0') << QByteArray(2, '\x0') << (int) QDataStream::Ok << qint64(0);
- QTest::newRow("-1") << QByteArray("\xff\xff", 2) << QByteArray("\xff\xff", 2) << (int) QDataStream::Ok << qint64(-1);
- QTest::newRow("1") << QByteArray("\x00\x01", 2) << QByteArray("\x01\x00", 2) << (int) QDataStream::Ok << qint64(1);
- QTest::newRow("37") << QByteArray("\x00\x25", 2) << QByteArray("\x25\x00", 2) << (int) QDataStream::Ok << qint64(37);
- QTest::newRow("37j") << QByteArray("\x00\x25j", 3) << QByteArray("\x25\x00j", 3) << (int) QDataStream::Ok << qint64(37);
- QTest::newRow("0x1234") << QByteArray("\x12\x34", 2) << QByteArray("\x34\x12", 2) << (int) QDataStream::Ok << qint64(0x1234);
-
- // past end
- QTest::newRow("empty") << QByteArray() << QByteArray() << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 1") << QByteArray("", 1) << QByteArray("", 1) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 2") << QByteArray("\x25", 1) << QByteArray("\x25", 1) << (int) QDataStream::ReadPastEnd << qint64(0);
-}
-
-TEST_qint(qint16, quint16)
-
-void tst_QDataStream::status_qint32_data()
-{
- QTest::addColumn<QByteArray>("bigEndianData");
- QTest::addColumn<QByteArray>("littleEndianData");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<qint64>("expectedValue");
-
- // ok
- QTest::newRow("0") << QByteArray(4, '\x0') << QByteArray(4, '\x0') << (int) QDataStream::Ok << qint64(0);
- QTest::newRow("-1") << QByteArray("\xff\xff\xff\xff", 4) << QByteArray("\xff\xff\xff\xff", 4) << (int) QDataStream::Ok << qint64(-1);
- QTest::newRow("1") << QByteArray("\x00\x00\x00\x01", 4) << QByteArray("\x01\x00\x00\x00", 4) << (int) QDataStream::Ok << qint64(1);
- QTest::newRow("37") << QByteArray("\x00\x00\x00\x25", 4) << QByteArray("\x25\x00\x00\x00", 4) << (int) QDataStream::Ok << qint64(37);
- QTest::newRow("37j") << QByteArray("\x00\x00\x00\x25j", 5) << QByteArray("\x25\x00\x00\x00j", 5) << (int) QDataStream::Ok << qint64(37);
- QTest::newRow("0x12345678") << QByteArray("\x12\x34\x56\x78", 4) << QByteArray("\x78\x56\x34\x12", 4) << (int) QDataStream::Ok << qint64(0x12345678);
-
- // past end
- QTest::newRow("empty") << QByteArray() << QByteArray() << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 1") << QByteArray("", 1) << QByteArray("", 1) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 2") << QByteArray("\x25", 1) << QByteArray("\x25", 1) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 3") << QByteArray("11", 2) << QByteArray("11", 2) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 4") << QByteArray("111", 3) << QByteArray("111", 3) << (int) QDataStream::ReadPastEnd << qint64(0);
-}
-
-TEST_qint(qint32, quint32)
-
-void tst_QDataStream::status_qint64_data()
-{
- QTest::addColumn<QByteArray>("bigEndianData");
- QTest::addColumn<QByteArray>("littleEndianData");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<qint64>("expectedValue");
-
- // ok
- QTest::newRow("0") << QByteArray(8, '\x0') << QByteArray(8, '\x0') << (int) QDataStream::Ok << qint64(0);
- QTest::newRow("-1") << QByteArray("\xff\xff\xff\xff\xff\xff\xff\xff", 8) << QByteArray("\xff\xff\xff\xff\xff\xff\xff\xff", 8) << (int) QDataStream::Ok << qint64(-1);
- QTest::newRow("1") << QByteArray("\x00\x00\x00\x00\x00\x00\x00\x01", 8) << QByteArray("\x01\x00\x00\x00\x00\x00\x00\x00", 8) << (int) QDataStream::Ok << qint64(1);
- QTest::newRow("37") << QByteArray("\x00\x00\x00\x00\x00\x00\x00\x25", 8) << QByteArray("\x25\x00\x00\x00\x00\x00\x00\x00", 8) << (int) QDataStream::Ok << qint64(37);
- QTest::newRow("37j") << QByteArray("\x00\x00\x00\x00\x00\x00\x00\x25j", 9) << QByteArray("\x25\x00\x00\x00\x00\x00\x00\x00j", 9) << (int) QDataStream::Ok << qint64(37);
- QTest::newRow("0x123456789ABCDEF0") << QByteArray("\x12\x34\x56\x78\x9a\xbc\xde\xf0", 8) << QByteArray("\xf0\xde\xbc\x9a\x78\x56\x34\x12", 8) << (int) QDataStream::Ok << (qint64)Q_INT64_C(0x123456789ABCDEF0);
-
- // past end
- QTest::newRow("empty") << QByteArray() << QByteArray() << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 1") << QByteArray("", 1) << QByteArray("", 1) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 2") << QByteArray("\x25", 1) << QByteArray("\x25", 1) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 3") << QByteArray("11", 2) << QByteArray("11", 2) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 4") << QByteArray("111", 3) << QByteArray("111", 3) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 5") << QByteArray("1111", 4) << QByteArray("1111", 4) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 6") << QByteArray("11111", 5) << QByteArray("11111", 5) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 7") << QByteArray("111111", 6) << QByteArray("111111", 6) << (int) QDataStream::ReadPastEnd << qint64(0);
- QTest::newRow("end 8") << QByteArray("1111111", 7) << QByteArray("1111111", 7) << (int) QDataStream::ReadPastEnd << qint64(0);
-}
-
-TEST_qint(qint64, quint64)
-
-void tst_QDataStream::status_float_data()
-{
- QTest::addColumn<QByteArray>("bigEndianData");
- QTest::addColumn<QByteArray>("littleEndianData");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<double>("expectedValue");
-
- // ok
- QTest::newRow("0") << QByteArray(4, '\0') << QByteArray(4, '\0') << (int) QDataStream::Ok << (double) 0.0;
- QTest::newRow("-1") << QByteArray("\xbf\x80\x00\x00", 4) << QByteArray("\x00\x00\x80\xbf", 4) << (int) QDataStream::Ok << (double) -1;
- QTest::newRow("1") << QByteArray("\x3f\x80\x00\x00", 4) << QByteArray("\x00\x00\x80\x3f", 4) << (int) QDataStream::Ok << (double) 1;
- QTest::newRow("37") << QByteArray("\x42\x14\x00\x00", 4) << QByteArray("\x00\x00\x14\x42", 4) << (int) QDataStream::Ok << (double) 37;
- QTest::newRow("37j") << QByteArray("\x42\x14\x00\x00j", 5) << QByteArray("\x00\x00\x14\x42j", 5) << (int) QDataStream::Ok << (double) 37;
- QTest::newRow("3.14") << QByteArray("\x40\x48\xf5\xc3", 4) << QByteArray("\xc3\xf5\x48\x40", 4) << (int) QDataStream::Ok << (double) 3.14;
-
- // past end
- QTest::newRow("empty") << QByteArray() << QByteArray() << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 1") << QByteArray("", 1) << QByteArray("", 1) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 2") << QByteArray("\x25", 1) << QByteArray("\x25", 1) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 3") << QByteArray("11", 2) << QByteArray("11", 2) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 4") << QByteArray("111", 3) << QByteArray("111", 3) << (int) QDataStream::ReadPastEnd << double(0);
-}
-
-TEST_FLOAT(float)
-
-void tst_QDataStream::status_double_data()
-{
- QTest::addColumn<QByteArray>("bigEndianData");
- QTest::addColumn<QByteArray>("littleEndianData");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<double>("expectedValue");
-
- // ok
- QTest::newRow("0") << QByteArray("\x00\x00\x00\x00\x00\x00\x00\x00", 8) << QByteArray("\x00\x00\x00\x00\x00\x00\x00\x00", 8) << (int) QDataStream::Ok << (double) 0;
- QTest::newRow("-1") << QByteArray("\xbf\xf0\x00\x00\x00\x00\x00\x00", 8) << QByteArray("\x00\x00\x00\x00\x00\x00\xf0\xbf", 8) << (int) QDataStream::Ok << (double) -1;
- QTest::newRow("1") << QByteArray("\x3f\xf0\x00\x00\x00\x00\x00\x00", 8) << QByteArray("\x00\x00\x00\x00\x00\x00\xf0\x3f", 8) << (int) QDataStream::Ok << (double) 1;
- QTest::newRow("37") << QByteArray("\x40\x42\x80\x00\x00\x00\x00\x00", 8) << QByteArray("\x00\x00\x00\x00\x00\x80\x42\x40", 8) << (int) QDataStream::Ok << (double) 37;
- QTest::newRow("37j") << QByteArray("\x40\x42\x80\x00\x00\x00\x00\x00j", 9) << QByteArray("\x00\x00\x00\x00\x00\x80\x42\x40j", 9) << (int) QDataStream::Ok << (double) 37;
- QTest::newRow("3.14") << QByteArray("\x40\x09\x1e\xb8\x60\x00\x00\x00", 8) << QByteArray("\x00\x00\x00\x60\xb8\x1e\x09\x40", 8) << (int) QDataStream::Ok << (double) 3.14;
- QTest::newRow("1234.5678") << QByteArray("\x40\x93\x4a\x45\x6d\x5c\xfa\xad", 8) << QByteArray("\xad\xfa\x5c\x6d\x45\x4a\x93\x40", 8) << (int) QDataStream::Ok << (double) 1234.5678;
-
- // past end
- QTest::newRow("empty") << QByteArray() << QByteArray() << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 1") << QByteArray("", 1) << QByteArray("", 1) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 2") << QByteArray("\x25", 1) << QByteArray("\x25", 1) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 3") << QByteArray("11", 2) << QByteArray("11", 2) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 4") << QByteArray("111", 3) << QByteArray("111", 3) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 5") << QByteArray("1111", 4) << QByteArray("1111", 4) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 6") << QByteArray("11111", 5) << QByteArray("11111", 5) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 7") << QByteArray("111111", 6) << QByteArray("111111", 6) << (int) QDataStream::ReadPastEnd << double(0);
- QTest::newRow("end 8") << QByteArray("1111111", 7) << QByteArray("1111111", 7) << (int) QDataStream::ReadPastEnd << double(0);
-}
-
-TEST_FLOAT(double)
-
-void tst_QDataStream::status_charptr_QByteArray_data()
-{
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<QByteArray>("expectedString");
-
- QByteArray oneMbMinus1(1024 * 1024 - 1, '\0');
- for (int i = 0; i < oneMbMinus1.size(); ++i)
- oneMbMinus1[i] = 0x1 | (8 * ((uchar)i / 9));
- QByteArray threeMbMinus1 = oneMbMinus1 + 'j' + oneMbMinus1 + 'k' + oneMbMinus1;
-
- // ok
- QTest::newRow("size 0") << QByteArray("\x00\x00\x00\x00", 4) << (int) QDataStream::Ok << QByteArray();
- QTest::newRow("size 1") << QByteArray("\x00\x00\x00\x01j", 5) << (int) QDataStream::Ok << QByteArray("j");
- QTest::newRow("size 2") << QByteArray("\x00\x00\x00\x02jk", 6) << (int) QDataStream::Ok << QByteArray("jk");
- QTest::newRow("size 3") << QByteArray("\x00\x00\x00\x03jkl", 7) << (int) QDataStream::Ok << QByteArray("jkl");
- QTest::newRow("size 4") << QByteArray("\x00\x00\x00\x04jklm", 8) << (int) QDataStream::Ok << QByteArray("jklm");
- QTest::newRow("size 4j") << QByteArray("\x00\x00\x00\x04jklmj", 8) << (int) QDataStream::Ok << QByteArray("jklm");
- QTest::newRow("size 1MB-1") << QByteArray("\x00\x0f\xff\xff", 4) + oneMbMinus1 + QByteArray("j") << (int) QDataStream::Ok << oneMbMinus1;
- QTest::newRow("size 1MB") << QByteArray("\x00\x10\x00\x00", 4) + oneMbMinus1 + QByteArray("jkl") << (int) QDataStream::Ok << oneMbMinus1 + "j";
- QTest::newRow("size 1MB+1") << QByteArray("\x00\x10\x00\x01", 4) + oneMbMinus1 + QByteArray("jkl") << (int) QDataStream::Ok << oneMbMinus1 + "jk";
- QTest::newRow("size 3MB-1") << QByteArray("\x00\x2f\xff\xff", 4) + threeMbMinus1 + QByteArray("j") << (int) QDataStream::Ok << threeMbMinus1;
- QTest::newRow("size 3MB") << QByteArray("\x00\x30\x00\x00", 4) + threeMbMinus1 + QByteArray("jkl") << (int) QDataStream::Ok << threeMbMinus1 + "j";
- QTest::newRow("size 3MB+1") << QByteArray("\x00\x30\x00\x01", 4) + threeMbMinus1 + QByteArray("jkl") << (int) QDataStream::Ok << threeMbMinus1 + "jk";
-
- // past end
- QTest::newRow("empty") << QByteArray() << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("trunclen 1") << QByteArray("x") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("trunclen 2") << QByteArray("xx") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("trunclen 3") << QByteArray("xxx") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("truncdata 1") << QByteArray("xxxx") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("truncdata 2") << QByteArray("xxxxyyyy") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 1") << QByteArray("\x00\x00\x00\x01", 4) << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 2") << QByteArray("\x00\x00\x00\x02j", 5) << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 3") << QByteArray("\x00\x00\x00\x03jk", 6) << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 4") << QByteArray("\x00\x00\x00\x04jkl", 7) << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 1MB") << QByteArray("\x00\x10\x00\x00", 4) + oneMbMinus1 << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 1MB+1") << QByteArray("\x00\x10\x00\x01", 4) + oneMbMinus1 + QByteArray("j") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 3MB") << QByteArray("\x00\x30\x00\x00", 4) + threeMbMinus1 << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("badsize 3MB+1") << QByteArray("\x00\x30\x00\x01", 4) + threeMbMinus1 + QByteArray("j") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("size -1") << QByteArray("\xff\xff\xff\xff", 4) << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("size -2") << QByteArray("\xff\xff\xff\xfe", 4) << (int) QDataStream::ReadPastEnd << QByteArray();
-}
-
-void tst_QDataStream::status_charptr_QByteArray()
-{
- QFETCH(QByteArray, data);
- QFETCH(int, expectedStatus);
- QFETCH(QByteArray, expectedString);
-
- {
- QDataStream stream(&data, QIODevice::ReadOnly);
- char *buf;
- stream >> buf;
-
- QCOMPARE((int)qstrlen(buf), expectedString.size());
- QCOMPARE(QByteArray(buf), expectedString);
- QCOMPARE(int(stream.status()), expectedStatus);
- delete [] buf;
- }
- {
- QDataStream stream(&data, QIODevice::ReadOnly);
- char *buf;
- uint len;
- stream.readBytes(buf, len);
-
- QCOMPARE((int)len, expectedString.size());
- QCOMPARE(QByteArray(buf, len), expectedString);
- QCOMPARE(int(stream.status()), expectedStatus);
- delete [] buf;
- }
- {
- QDataStream stream(&data, QIODevice::ReadOnly);
- QByteArray buf;
- stream >> buf;
-
- if (data.startsWith("\xff\xff\xff\xff")) {
- // QByteArray, unlike 'char *', supports the null/empty distinction
- QVERIFY(buf.isNull());
- } else {
- QCOMPARE(buf.size(), expectedString.size());
- QCOMPARE(buf, expectedString);
- QCOMPARE(int(stream.status()), expectedStatus);
- }
- }
-}
-
-static QByteArray qstring2qbytearray(const QString &str)
-{
- QByteArray ba(str.size() * 2 , '\0');
- for (int i = 0; i < str.size(); ++i) {
- // BigEndian
- ba[2 * i] = str[i].row();
- ba[2 * i + 1] = str[i].cell();
- }
- return ba;
-}
-
-void tst_QDataStream::status_QString_data()
-{
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<QString>("expectedString");
-
- QString oneMbMinus1;
- oneMbMinus1.resize(1024 * 1024 - 1);
- for (int i = 0; i < oneMbMinus1.size(); ++i)
- oneMbMinus1[i] = 0x1 | (8 * ((uchar)i / 9));
- QString threeMbMinus1 = oneMbMinus1 + QChar('j') + oneMbMinus1 + QChar('k') + oneMbMinus1;
-
- QByteArray threeMbMinus1Data = qstring2qbytearray(threeMbMinus1);
- QByteArray oneMbMinus1Data = qstring2qbytearray(oneMbMinus1);
-
- // ok
- QTest::newRow("size 0") << QByteArray("\x00\x00\x00\x00", 4) << (int) QDataStream::Ok << QString();
- QTest::newRow("size 1") << QByteArray("\x00\x00\x00\x02\x00j", 6) << (int) QDataStream::Ok << QString("j");
- QTest::newRow("size 2") << QByteArray("\x00\x00\x00\x04\x00j\x00k", 8) << (int) QDataStream::Ok << QString("jk");
- QTest::newRow("size 3") << QByteArray("\x00\x00\x00\x06\x00j\x00k\x00l", 10) << (int) QDataStream::Ok << QString("jkl");
- QTest::newRow("size 4") << QByteArray("\x00\x00\x00\x08\x00j\x00k\x00l\x00m", 12) << (int) QDataStream::Ok << QString("jklm");
- QTest::newRow("size 4j") << QByteArray("\x00\x00\x00\x08\x00j\x00k\x00l\x00mjj", 14) << (int) QDataStream::Ok << QString("jklm");
- QTest::newRow("size 1MB-1") << QByteArray("\x00\x1f\xff\xfe", 4) + oneMbMinus1Data + QByteArray("jj") << (int) QDataStream::Ok << oneMbMinus1;
- QTest::newRow("size 1MB") << QByteArray("\x00\x20\x00\x00", 4) + oneMbMinus1Data + QByteArray("\x00j\x00k\x00l", 6) << (int) QDataStream::Ok << oneMbMinus1 + "j";
- QTest::newRow("size 1MB+1") << QByteArray("\x00\x20\x00\x02", 4) + oneMbMinus1Data + QByteArray("\x00j\x00k\x00l", 6) << (int) QDataStream::Ok << oneMbMinus1 + "jk";
- QTest::newRow("size 3MB-1") << QByteArray("\x00\x5f\xff\xfe", 4) + threeMbMinus1Data + QByteArray("jj") << (int) QDataStream::Ok << threeMbMinus1;
- QTest::newRow("size 3MB") << QByteArray("\x00\x60\x00\x00", 4) + threeMbMinus1Data + QByteArray("\x00j\x00k\x00l", 6) << (int) QDataStream::Ok << threeMbMinus1 + "j";
- QTest::newRow("size 3MB+1") << QByteArray("\x00\x60\x00\x02", 4) + threeMbMinus1Data + QByteArray("\x00j\x00k\x00l", 6) << (int) QDataStream::Ok << threeMbMinus1 + "jk";
-
- // past end
- QTest::newRow("empty") << QByteArray() << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("trunclen 1") << QByteArray("x") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("trunclen 2") << QByteArray("xx") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("trunclen 3") << QByteArray("xxx") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("truncdata 1") << QByteArray("xxxx") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("truncdata 2") << QByteArray("xxxxyyyy") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 1") << QByteArray("\x00\x00\x00\x02", 4) << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 2") << QByteArray("\x00\x00\x00\x04jj", 6) << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 3") << QByteArray("\x00\x00\x00\x06jjkk", 8) << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 4") << QByteArray("\x00\x00\x00\x08jjkkll", 10) << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 1MB") << QByteArray("\x00\x20\x00\x00", 4) + oneMbMinus1Data << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 1MB+1") << QByteArray("\x00\x20\x00\x02", 4) + oneMbMinus1Data + QByteArray("j") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 3MB") << QByteArray("\x00\x60\x00\x00", 4) + threeMbMinus1Data << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("badsize 3MB+1") << QByteArray("\x00\x60\x00\x02", 4) + threeMbMinus1Data + QByteArray("j") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("size -2") << QByteArray("\xff\xff\xff\xfe", 4) << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("size MAX") << QByteArray("\x7f\xff\xff\xfe", 4) << (int) QDataStream::ReadPastEnd << QString();
-
- // corrupt data
- QTest::newRow("corrupt1") << QByteArray("yyyy") << (int) QDataStream::ReadCorruptData << QString();
- QTest::newRow("size -3") << QByteArray("\xff\xff\xff\xfd", 4) << (int) QDataStream::ReadCorruptData << QString();
-}
-
-void tst_QDataStream::status_QString()
-{
- QFETCH(QByteArray, data);
- QFETCH(int, expectedStatus);
- QFETCH(QString, expectedString);
-
- QDataStream stream(&data, QIODevice::ReadOnly);
- QString str;
- stream >> str;
-
- QCOMPARE(str.size(), expectedString.size());
- QCOMPARE(str, expectedString);
- QCOMPARE(int(stream.status()), expectedStatus);
-}
-
-static QBitArray bitarray(const QString &str)
-{
- QBitArray array(str.size());
- for (int i = 0; i < str.size(); ++i)
- array[i] = (str[i] != '0');
- return array;
-}
-
-void tst_QDataStream::status_QBitArray_data()
-{
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<int>("expectedStatus");
- QTest::addColumn<QBitArray>("expectedString");
-
- // ok
- QTest::newRow("size 0") << QByteArray("\x00\x00\x00\x00", 4) << (int) QDataStream::Ok << QBitArray();
- QTest::newRow("size 1a") << QByteArray("\x00\x00\x00\x01\x00", 5) << (int) QDataStream::Ok << bitarray("0");
- QTest::newRow("size 1b") << QByteArray("\x00\x00\x00\x01\x01", 5) << (int) QDataStream::Ok << bitarray("1");
- QTest::newRow("size 2") << QByteArray("\x00\x00\x00\x02\x03", 5) << (int) QDataStream::Ok << bitarray("11");
- QTest::newRow("size 3") << QByteArray("\x00\x00\x00\x03\x07", 5) << (int) QDataStream::Ok << bitarray("111");
- QTest::newRow("size 4") << QByteArray("\x00\x00\x00\x04\x0f", 5) << (int) QDataStream::Ok << bitarray("1111");
- QTest::newRow("size 5") << QByteArray("\x00\x00\x00\x05\x1f", 5) << (int) QDataStream::Ok << bitarray("11111");
- QTest::newRow("size 6") << QByteArray("\x00\x00\x00\x06\x3f", 5) << (int) QDataStream::Ok << bitarray("111111");
- QTest::newRow("size 7a") << QByteArray("\x00\x00\x00\x07\x7f", 5) << (int) QDataStream::Ok << bitarray("1111111");
- QTest::newRow("size 7b") << QByteArray("\x00\x00\x00\x07\x7e", 5) << (int) QDataStream::Ok << bitarray("0111111");
- QTest::newRow("size 7c") << QByteArray("\x00\x00\x00\x07\x00", 5) << (int) QDataStream::Ok << bitarray("0000000");
- QTest::newRow("size 7d") << QByteArray("\x00\x00\x00\x07\x39", 5) << (int) QDataStream::Ok << bitarray("1001110");
- QTest::newRow("size 8") << QByteArray("\x00\x00\x00\x08\xff", 5) << (int) QDataStream::Ok << bitarray("11111111");
- QTest::newRow("size 9") << QByteArray("\x00\x00\x00\x09\xff\x01", 6) << (int) QDataStream::Ok << bitarray("111111111");
- QTest::newRow("size 15") << QByteArray("\x00\x00\x00\x0f\xff\x7f", 6) << (int) QDataStream::Ok << bitarray("111111111111111");
- QTest::newRow("size 16") << QByteArray("\x00\x00\x00\x10\xff\xff", 6) << (int) QDataStream::Ok << bitarray("1111111111111111");
- QTest::newRow("size 17") << QByteArray("\x00\x00\x00\x11\xff\xff\x01", 7) << (int) QDataStream::Ok << bitarray("11111111111111111");
- QTest::newRow("size 32") << QByteArray("\x00\x00\x00\x20\xff\xff\xff\xff", 8) << (int) QDataStream::Ok << bitarray("11111111111111111111111111111111");
-
- // past end
- QTest::newRow("empty") << QByteArray() << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("badsize 0a") << QByteArray("\x00", 1) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("badsize 0b") << QByteArray("\x00\x00", 2) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("badsize 0c") << QByteArray("\x00\x00\x00", 3) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("badsize 1") << QByteArray("\x00\x00\x00\x01", 4) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("badsize 2") << QByteArray("\x00\x00\x00\x02", 4) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("badsize 3") << QByteArray("\x00\x00\x00\x03", 4) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("badsize 7") << QByteArray("\x00\x00\x00\x04", 4) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("size 8") << QByteArray("\x00\x00\x00\x08", 4) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("size 9") << QByteArray("\x00\x00\x00\x09\xff", 5) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("size 15") << QByteArray("\x00\x00\x00\x0f\xff", 5) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("size 16") << QByteArray("\x00\x00\x00\x10\xff", 5) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("size 17") << QByteArray("\x00\x00\x00\x11\xff\xff", 6) << (int) QDataStream::ReadPastEnd << QBitArray();
- QTest::newRow("size 32") << QByteArray("\x00\x00\x00\x20\xff\xff\xff", 7) << (int) QDataStream::ReadPastEnd << QBitArray();
-
- // corrupt data
- QTest::newRow("junk 1a") << QByteArray("\x00\x00\x00\x01\x02", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 1b") << QByteArray("\x00\x00\x00\x01\x04", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 1c") << QByteArray("\x00\x00\x00\x01\x08", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 1d") << QByteArray("\x00\x00\x00\x01\x10", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 1e") << QByteArray("\x00\x00\x00\x01\x20", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 1f") << QByteArray("\x00\x00\x00\x01\x40", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 1g") << QByteArray("\x00\x00\x00\x01\x80", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 2") << QByteArray("\x00\x00\x00\x02\x04", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 3") << QByteArray("\x00\x00\x00\x03\x08", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 4") << QByteArray("\x00\x00\x00\x04\x10", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 5") << QByteArray("\x00\x00\x00\x05\x20", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 6") << QByteArray("\x00\x00\x00\x06\x40", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
- QTest::newRow("junk 7") << QByteArray("\x00\x00\x00\x07\x80", 5) << (int) QDataStream::ReadCorruptData << QBitArray();
-}
-
-void tst_QDataStream::status_QBitArray()
-{
- QFETCH(QByteArray, data);
- QFETCH(int, expectedStatus);
- QFETCH(QBitArray, expectedString);
-
- QDataStream stream(&data, QIODevice::ReadOnly);
- QBitArray str;
- stream >> str;
-
- QCOMPARE(int(stream.status()), expectedStatus);
- QCOMPARE(str.size(), expectedString.size());
- QCOMPARE(str, expectedString);
-}
-
-#define MAP_TEST(byteArray, initialStatus, expectedStatus, expectedHash) \
- for (bool inTransaction = false;; inTransaction = true) { \
- { \
- QByteArray ba = byteArray; \
- QDataStream stream(&ba, QIODevice::ReadOnly); \
- if (inTransaction) \
- stream.startTransaction(); \
- stream.setStatus(initialStatus); \
- stream >> hash; \
- QCOMPARE((int)stream.status(), (int)expectedStatus); \
- if (!inTransaction || stream.commitTransaction()) { \
- QCOMPARE(hash.size(), expectedHash.size()); \
- QCOMPARE(hash, expectedHash); \
- } else { \
- QVERIFY(hash.isEmpty()); \
- } \
- } \
- { \
- QByteArray ba = byteArray; \
- StringMap expectedMap; \
- StringHash::const_iterator it = expectedHash.constBegin(); \
- for (; it != expectedHash.constEnd(); ++it) \
- expectedMap.insert(it.key(), it.value()); \
- QDataStream stream(&ba, QIODevice::ReadOnly); \
- if (inTransaction) \
- stream.startTransaction(); \
- stream.setStatus(initialStatus); \
- stream >> map; \
- QCOMPARE((int)stream.status(), (int)expectedStatus); \
- if (!inTransaction || stream.commitTransaction()) { \
- QCOMPARE(map.size(), expectedMap.size()); \
- QCOMPARE(map, expectedMap); \
- } else { \
- QVERIFY(map.isEmpty()); \
- } \
- } \
- if (inTransaction) \
- break; \
- }
-
-void tst_QDataStream::status_QHash_QMap()
-{
- typedef QHash<QString, QString> StringHash;
- typedef QMap<QString, QString> StringMap;
- StringHash hash;
- StringMap map;
-
- StringHash hash1;
- hash1.insert("", "");
-
- StringHash hash2;
- hash2.insert("J", "K");
- hash2.insert("L", "MN");
-
- // ok
- MAP_TEST(QByteArray("\x00\x00\x00\x00", 4), QDataStream::Ok, QDataStream::Ok, StringHash());
- MAP_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", 12), QDataStream::Ok, QDataStream::Ok, hash1);
- MAP_TEST(QByteArray("\x00\x00\x00\x02\x00\x00\x00\x02\x00J\x00\x00\x00\x02\x00K"
- "\x00\x00\x00\x02\x00L\x00\x00\x00\x04\x00M\x00N", 30), QDataStream::Ok, QDataStream::Ok, hash2);
-
- // past end
- MAP_TEST(QByteArray(), QDataStream::Ok, QDataStream::ReadPastEnd, StringHash());
- MAP_TEST(QByteArray("\x00", 1), QDataStream::Ok, QDataStream::ReadPastEnd, StringHash());
- MAP_TEST(QByteArray("\x00\x00", 2), QDataStream::Ok, QDataStream::ReadPastEnd, StringHash());
- MAP_TEST(QByteArray("\x00\x00\x00", 3), QDataStream::Ok, QDataStream::ReadPastEnd, StringHash());
- MAP_TEST(QByteArray("\x00\x00\x00\x01", 4), QDataStream::Ok, QDataStream::ReadPastEnd, StringHash());
- for (int i = 4; i < 12; ++i) {
- MAP_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", i), QDataStream::Ok, QDataStream::ReadPastEnd, StringHash());
- }
-
- // corrupt data
- MAP_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x01", 8), QDataStream::Ok, QDataStream::ReadCorruptData, StringHash());
- MAP_TEST(QByteArray("\x00\x00\x00\x02\x00\x00\x00\x01\x00J\x00\x00\x00\x01\x00K"
- "\x00\x00\x00\x01\x00L\x00\x00\x00\x02\x00M\x00N", 30), QDataStream::Ok, QDataStream::ReadCorruptData, StringHash());
-
- // test the previously latched error status is not affected by reading
- MAP_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", 12), QDataStream::ReadPastEnd, QDataStream::ReadPastEnd, hash1);
- MAP_TEST(QByteArray("\x00\x00\x00\x01", 4), QDataStream::ReadCorruptData, QDataStream::ReadCorruptData, StringHash());
- MAP_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x01", 8), QDataStream::ReadPastEnd, QDataStream::ReadPastEnd, StringHash());
-}
-
-#define LIST_TEST(byteArray, initialStatus, expectedStatus, expectedList) \
- for (bool inTransaction = false;; inTransaction = true) { \
- { \
- QByteArray ba = byteArray; \
- QDataStream stream(&ba, QIODevice::ReadOnly); \
- if (inTransaction) \
- stream.startTransaction(); \
- stream.setStatus(initialStatus); \
- stream >> list; \
- QCOMPARE((int)stream.status(), (int)expectedStatus); \
- if (!inTransaction || stream.commitTransaction()) { \
- QCOMPARE(list.size(), expectedList.size()); \
- QCOMPARE(list, expectedList); \
- } else { \
- QVERIFY(list.isEmpty()); \
- } \
- } \
- { \
- LinkedList expectedLinkedList; \
- for (int i = 0; i < expectedList.count(); ++i) \
- expectedLinkedList << expectedList.at(i); \
- QByteArray ba = byteArray; \
- QDataStream stream(&ba, QIODevice::ReadOnly); \
- if (inTransaction) \
- stream.startTransaction(); \
- stream.setStatus(initialStatus); \
- stream >> linkedList; \
- QCOMPARE((int)stream.status(), (int)expectedStatus); \
- if (!inTransaction || stream.commitTransaction()) { \
- QCOMPARE(linkedList.size(), expectedLinkedList.size()); \
- QCOMPARE(linkedList, expectedLinkedList); \
- } else { \
- QVERIFY(linkedList.isEmpty()); \
- } \
- } \
- { \
- Vector expectedVector; \
- for (int i = 0; i < expectedList.count(); ++i) \
- expectedVector << expectedList.at(i); \
- QByteArray ba = byteArray; \
- QDataStream stream(&ba, QIODevice::ReadOnly); \
- if (inTransaction) \
- stream.startTransaction(); \
- stream.setStatus(initialStatus); \
- stream >> vector; \
- QCOMPARE((int)stream.status(), (int)expectedStatus); \
- if (!inTransaction || stream.commitTransaction()) { \
- QCOMPARE(vector.size(), expectedVector.size()); \
- QCOMPARE(vector, expectedVector); \
- } else { \
- QVERIFY(vector.isEmpty()); \
- } \
- } \
- if (inTransaction) \
- break; \
- }
-
-void tst_QDataStream::status_QLinkedList_QList_QVector()
-{
- typedef QLinkedList<QString> LinkedList;
- typedef QList<QString> List;
- typedef QVector<QString> Vector;
- LinkedList linkedList;
- List list;
- Vector vector;
-
- // ok
- {
- List listWithEmptyString;
- listWithEmptyString.append("");
-
- List someList;
- someList.append("J");
- someList.append("MN");
-
- LIST_TEST(QByteArray("\x00\x00\x00\x00", 4), QDataStream::Ok, QDataStream::Ok, List());
- LIST_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00", 8), QDataStream::Ok, QDataStream::Ok, listWithEmptyString);
- LIST_TEST(QByteArray("\x00\x00\x00\x02\x00\x00\x00\x02\x00J"
- "\x00\x00\x00\x04\x00M\x00N", 18), QDataStream::Ok, QDataStream::Ok, someList);
- }
-
- // past end
- {
- LIST_TEST(QByteArray(), QDataStream::Ok, QDataStream::ReadPastEnd, List());
- LIST_TEST(QByteArray("\x00", 1), QDataStream::Ok, QDataStream::ReadPastEnd, List());
- LIST_TEST(QByteArray("\x00\x00", 2), QDataStream::Ok, QDataStream::ReadPastEnd, List());
- LIST_TEST(QByteArray("\x00\x00\x00", 3), QDataStream::Ok, QDataStream::ReadPastEnd, List());
- LIST_TEST(QByteArray("\x00\x00\x00\x01", 4), QDataStream::Ok, QDataStream::ReadPastEnd, List());
- for (int i = 4; i < 12; ++i) {
- LIST_TEST(QByteArray("\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", i), QDataStream::Ok, QDataStream::ReadPastEnd, List());
- }
- }
-
- // corrupt data
- {
- LIST_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x01", 8), QDataStream::Ok, QDataStream::ReadCorruptData, List());
- LIST_TEST(QByteArray("\x00\x00\x00\x02\x00\x00\x00\x01\x00J"
- "\x00\x00\x00\x02\x00M\x00N", 18), QDataStream::Ok, QDataStream::ReadCorruptData, List());
- }
-
- // test the previously latched error status is not affected by reading
- {
- List listWithEmptyString;
- listWithEmptyString.append("");
-
- LIST_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00", 8), QDataStream::ReadPastEnd, QDataStream::ReadPastEnd, listWithEmptyString);
- LIST_TEST(QByteArray("\x00\x00\x00\x01", 4), QDataStream::ReadCorruptData, QDataStream::ReadCorruptData, List());
- LIST_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x01", 8), QDataStream::ReadPastEnd, QDataStream::ReadPastEnd, List());
- }
-}
-
-void tst_QDataStream::streamToAndFromQByteArray()
-{
- QByteArray data;
- QDataStream in(&data, QIODevice::WriteOnly);
- QDataStream out(&data, QIODevice::ReadOnly);
-
- quint32 x = 0xdeadbeef;
- quint32 y;
- in << x;
- out >> y;
-
- QCOMPARE(y, x);
-}
-
-void tst_QDataStream::streamRealDataTypes()
-{
- // Generate QPicture from pixmap.
- QPixmap pm(open_xpm);
- QVERIFY(!pm.isNull());
- QPicture picture;
- picture.setBoundingRect(QRect(QPoint(0, 0), pm.size()));
- QPainter painter(&picture);
- painter.drawPixmap(0, 0, pm);
- painter.end();
-
- // Generate path
- QPainterPath path;
- path.lineTo(10, 0);
- path.cubicTo(0, 0, 10, 10, 20, 20);
- path.arcTo(4, 5, 6, 7, 8, 9);
- path.quadTo(1, 2, 3, 4);
-
- QColor color(64, 64, 64);
- color.setAlphaF(0.5);
- QRadialGradient radialGradient(5, 6, 7, 8, 9);
- QBrush radialBrush(radialGradient);
- QConicalGradient conicalGradient(5, 6, 7);
- QBrush conicalBrush(conicalGradient);
-
- for (int i = 0; i < 2; ++i) {
- QFile file;
- if (i == 0) {
- file.setFileName(QFINDTESTDATA("datastream.q42"));
- } else {
- file.setFileName("datastream.tmp");
-
- // Generate data
- QVERIFY(file.open(QIODevice::WriteOnly));
- QDataStream stream(&file);
- stream.setVersion(QDataStream::Qt_4_2);
- stream << qreal(0) << qreal(1.0) << qreal(1.1) << qreal(3.14) << qreal(-3.14) << qreal(-1);
- stream << QPointF(3, 5) << QRectF(-1, -2, 3, 4) << (QPolygonF() << QPointF(0, 0) << QPointF(1, 2));
- stream << QMatrix().rotate(90).scale(2, 2);
- stream << path;
- stream << picture;
- stream << QTextLength(QTextLength::VariableLength, 1.5);
- stream << color;
- stream << radialBrush << conicalBrush;
- stream << QPen(QBrush(Qt::red), 1.5);
-
- file.close();
- }
-
- QPointF point;
- QRectF rect;
- QPolygonF polygon;
- QMatrix matrix;
- QPainterPath p;
- QPicture pict;
- QTextLength textLength;
- QColor col;
- QBrush rGrad;
- QBrush cGrad;
- QPen pen;
-
- QVERIFY(file.open(QIODevice::ReadOnly));
- QDataStream stream(&file);
- stream.setVersion(QDataStream::Qt_4_2);
-
- if (i == 0) {
- // the reference stream for 4.2 contains doubles,
- // so we must read them out as doubles!
- double a, b, c, d, e, f;
- stream >> a;
- QCOMPARE(a, 0.0);
- stream >> b;
- QCOMPARE(b, 1.0);
- stream >> c;
- QCOMPARE(c, 1.1);
- stream >> d;
- QCOMPARE(d, 3.14);
- stream >> e;
- QCOMPARE(e, -3.14);
- stream >> f;
- QCOMPARE(f, -1.0);
- } else {
- qreal a, b, c, d, e, f;
- stream >> a;
- QCOMPARE(a, qreal(0));
- stream >> b;
- QCOMPARE(b, qreal(1.0));
- stream >> c;
- QCOMPARE(c, qreal(1.1));
- stream >> d;
- QCOMPARE(d, qreal(3.14));
- stream >> e;
- QCOMPARE(e, qreal(-3.14));
- stream >> f;
- QCOMPARE(f, qreal(-1));
- }
- stream >> point;
- QCOMPARE(point, QPointF(3, 5));
- stream >> rect;
- QCOMPARE(rect, QRectF(-1, -2, 3, 4));
- stream >> polygon;
- QCOMPARE((QVector<QPointF> &)polygon, (QPolygonF() << QPointF(0, 0) << QPointF(1, 2)));
- stream >> matrix;
- QCOMPARE(matrix, QMatrix().rotate(90).scale(2, 2));
- stream >> p;
- QCOMPARE(p, path);
- if (i == 1) {
- stream >> pict;
-
- QByteArray pictA, pictB;
- QBuffer bufA, bufB;
- QVERIFY(bufA.open(QIODevice::ReadWrite));
- QVERIFY(bufB.open(QIODevice::ReadWrite));
-
- picture.save(&bufA);
- pict.save(&bufB);
-
- QCOMPARE(pictA, pictB);
- }
- stream >> textLength;
- QCOMPARE(textLength, QTextLength(QTextLength::VariableLength, 1.5));
- stream >> col;
- QCOMPARE(col, color);
- stream >> rGrad;
- QCOMPARE(rGrad.style(), radialBrush.style());
- QCOMPARE(rGrad.matrix(), radialBrush.matrix());
- QCOMPARE(rGrad.gradient()->type(), radialBrush.gradient()->type());
- QCOMPARE(rGrad.gradient()->stops(), radialBrush.gradient()->stops());
- QCOMPARE(rGrad.gradient()->spread(), radialBrush.gradient()->spread());
- QCOMPARE(((QRadialGradient *)rGrad.gradient())->center(), ((QRadialGradient *)radialBrush.gradient())->center());
- QCOMPARE(((QRadialGradient *)rGrad.gradient())->focalPoint(), ((QRadialGradient *)radialBrush.gradient())->focalPoint());
- QCOMPARE(((QRadialGradient *)rGrad.gradient())->radius(), ((QRadialGradient *)radialBrush.gradient())->radius());
- stream >> cGrad;
- QCOMPARE(cGrad.style(), conicalBrush.style());
- QCOMPARE(cGrad.matrix(), conicalBrush.matrix());
- QCOMPARE(cGrad.gradient()->type(), conicalBrush.gradient()->type());
- QCOMPARE(cGrad.gradient()->stops(), conicalBrush.gradient()->stops());
- QCOMPARE(cGrad.gradient()->spread(), conicalBrush.gradient()->spread());
- QCOMPARE(((QConicalGradient *)cGrad.gradient())->center(), ((QConicalGradient *)conicalBrush.gradient())->center());
- QCOMPARE(((QConicalGradient *)cGrad.gradient())->angle(), ((QConicalGradient *)conicalBrush.gradient())->angle());
-
- QCOMPARE(cGrad, conicalBrush);
- stream >> pen;
- QCOMPARE(pen.widthF(), qreal(1.5));
-
- QCOMPARE(stream.status(), QDataStream::Ok);
- }
-}
-
-void tst_QDataStream::compatibility_Qt3()
-{
- QByteArray ba("hello");
- QVariant var = ba;
- const quint32 invalidColor = 0x49000000;
- QByteArray stream;
- {
- QDataStream out(&stream, QIODevice::WriteOnly);
- out.setVersion(QDataStream::Qt_3_3);
- out << var;
- out << QColor();
- out << QColor(Qt::darkYellow);
- out << QColor(Qt::darkCyan);
- out << invalidColor;
- }
- {
- QDataStream in(stream);
- in.setVersion(QDataStream::Qt_3_3);
-
- quint32 type;
- in >> type;
- //29 is the type of a QByteArray in Qt3
- QCOMPARE(type, quint32(29));
- QByteArray ba2;
- in >> ba2;
- QCOMPARE(ba2, ba);
-
- quint32 color;
- in >> color;
- QCOMPARE(color, invalidColor);
- in >> color;
- QCOMPARE(color, QColor(Qt::darkYellow).rgb());
- QColor col;
- in >> col;
- QCOMPARE(col, QColor(Qt::darkCyan));
- in >> col;
- QVERIFY(!col.isValid());
- }
- {
- QLinearGradient gradient(QPointF(0,0), QPointF(1,1));
- gradient.setColorAt(0, Qt::red);
- gradient.setColorAt(1, Qt::blue);
-
- QBrush brush(gradient);
- QPalette palette;
- palette.setBrush(QPalette::Button, brush);
- palette.setColor(QPalette::Light, Qt::green);
-
- QByteArray stream;
- {
- QDataStream out(&stream, QIODevice::WriteOnly);
- out.setVersion(QDataStream::Qt_3_3);
- out << palette;
- out << brush;
- }
- QBrush in_brush;
- QPalette in_palette;
- {
- QDataStream in(stream);
- in.setVersion(QDataStream::Qt_3_3);
- in >> in_palette;
- in >> in_brush;
- }
- QCOMPARE(in_brush.style(), Qt::NoBrush);
- QCOMPARE(in_palette.brush(QPalette::Button).style(), Qt::NoBrush);
- QCOMPARE(in_palette.color(QPalette::Light), QColor(Qt::green));
- }
- // QTime() was serialized to (0, 0, 0, 0) in Qt3, not (0xFF, 0xFF, 0xFF, 0xFF)
- // This is because in Qt3 a null time was valid, and there was no support for deserializing a value of -1.
- {
- QByteArray stream;
- {
- QDataStream out(&stream, QIODevice::WriteOnly);
- out.setVersion(QDataStream::Qt_3_3);
- out << QTime();
- }
- QTime in_time;
- {
- QDataStream in(stream);
- in.setVersion(QDataStream::Qt_3_3);
- in >> in_time;
- }
- QVERIFY(in_time.isNull());
-
- quint32 rawValue;
- QDataStream in(stream);
- in.setVersion(QDataStream::Qt_3_3);
- in >> rawValue;
- QCOMPARE(rawValue, quint32(0));
- }
-
-}
-
-void tst_QDataStream::compatibility_Qt2()
-{
- QLinearGradient gradient(QPointF(0,0), QPointF(1,1));
- gradient.setColorAt(0, Qt::red);
- gradient.setColorAt(1, Qt::blue);
-
- QBrush brush(gradient);
- QPalette palette;
- palette.setBrush(QPalette::Button, brush);
- palette.setColor(QPalette::Light, Qt::green);
-
- QByteArray stream;
- {
- QDataStream out(&stream, QIODevice::WriteOnly);
- out.setVersion(QDataStream::Qt_2_1);
- out << palette;
- out << brush;
- }
- QBrush in_brush;
- QPalette in_palette;
- {
- QDataStream in(stream);
- in.setVersion(QDataStream::Qt_2_1);
- in >> in_palette;
- in >> in_brush;
- }
- QCOMPARE(in_brush.style(), Qt::NoBrush);
- QCOMPARE(in_palette.brush(QPalette::Button).style(), Qt::NoBrush);
- QCOMPARE(in_palette.color(QPalette::Light), QColor(Qt::green));
-}
-
-void tst_QDataStream::floatingPointNaN()
-{
- QDataStream::ByteOrder bo = QSysInfo::ByteOrder == QSysInfo::BigEndian
- ? QDataStream::LittleEndian
- : QDataStream::BigEndian;
-
- // Test and verify that values that become (s)nan's after swapping endianness
- // don't change in the process.
- // When compiling with e.g., MSVC (32bit) and when the fpu is used (fp:precise)
- // all snan's will be converted to qnan's (default behavior).
- // IF we get a snan after swapping endianness we can not copy the value to another
- // float as this will cause the value to differ from the original value.
- QByteArray ba;
-
- union {
- float f;
- quint32 i;
- } xs[2];
-
- xs[0].i = qbswap<quint32>(0xff800001);
- xs[1].i = qbswap<quint32>(0x7f800001);
-
- {
- QDataStream stream(&ba, QIODevice::WriteOnly);
- stream.setByteOrder(bo);
- stream.setFloatingPointPrecision(QDataStream::SinglePrecision);
- stream << xs[0].f;
- stream << xs[1].f;
- }
-
- {
- QDataStream stream(ba);
- stream.setByteOrder(bo);
- stream.setFloatingPointPrecision(QDataStream::SinglePrecision);
- float fr = 0.0f;
- stream >> fr;
- QCOMPARE(fr, xs[0].f);
- stream >> fr;
- QCOMPARE(fr, xs[1].f);
- }
-}
-
-void tst_QDataStream::floatingPointPrecision()
-{
- QByteArray ba;
- {
- QDataStream stream(&ba, QIODevice::WriteOnly);
- QCOMPARE(QDataStream::DoublePrecision, stream.floatingPointPrecision());
-
- float f = 123.0f;
- stream << f;
- QCOMPARE(ba.size(), int(sizeof(double)));
-
- double d = 234.0;
- stream << d;
- QCOMPARE(ba.size(), int(sizeof(double)*2));
-
- stream.setFloatingPointPrecision(QDataStream::SinglePrecision);
-
- f = 123.0f;
- stream << f;
- QCOMPARE(ba.size(), int(sizeof(double)*2 + sizeof(float)));
-
- d = 234.0;
- stream << d;
- QCOMPARE(ba.size(), int(sizeof(double)*2 + sizeof(float)*2));
- }
-
- {
- QDataStream stream(ba);
-
- float f = 0.0f;
- stream >> f;
- QCOMPARE(123.0f, f);
-
- double d = 0.0;
- stream >> d;
- QCOMPARE(234.0, d);
-
- f = 0.0f;
- stream.setFloatingPointPrecision(QDataStream::SinglePrecision);
- stream >> f;
- QCOMPARE(123.0f, f);
-
- d = 0.0;
- stream >> d;
- QCOMPARE(234.0, d);
- }
-
-}
-
-void tst_QDataStream::transaction_data()
-{
- QTest::addColumn<qint8>("i8Data");
- QTest::addColumn<qint16>("i16Data");
- QTest::addColumn<qint32>("i32Data");
- QTest::addColumn<qint64>("i64Data");
- QTest::addColumn<bool>("bData");
- QTest::addColumn<float>("fData");
- QTest::addColumn<double>("dData");
- QTest::addColumn<QByteArray>("strData");
- QTest::addColumn<QByteArray>("rawData");
-
- QTest::newRow("1") << qint8(1) << qint16(2) << qint32(3) << qint64(4) << true << 5.0f
- << double(6.0) << QByteArray("Hello world!") << QByteArray("Qt rocks!");
- QTest::newRow("2") << qint8(1 << 6) << qint16(1 << 14) << qint32(1 << 30) << qint64Data(3) << false << 123.0f
- << double(234.0) << stringData(5).toUtf8() << stringData(6).toUtf8();
- QTest::newRow("3") << qint8(-1) << qint16(-2) << qint32(-3) << qint64(-4) << true << -123.0f
- << double(-234.0) << stringData(3).toUtf8() << stringData(4).toUtf8();
-}
-
-void tst_QDataStream::transaction()
-{
- QByteArray testBuffer;
-
- QFETCH(qint8, i8Data);
- QFETCH(qint16, i16Data);
- QFETCH(qint32, i32Data);
- QFETCH(qint64, i64Data);
- QFETCH(bool, bData);
- QFETCH(float, fData);
- QFETCH(double, dData);
- QFETCH(QByteArray, strData);
- QFETCH(QByteArray, rawData);
-
- {
- QDataStream stream(&testBuffer, QIODevice::WriteOnly);
-
- stream << i8Data << i16Data << i32Data << i64Data
- << bData << fData << dData << strData.constData();
- stream.writeRawData(rawData.constData(), rawData.size());
- }
-
- for (int splitPos = 0; splitPos <= testBuffer.size(); ++splitPos) {
- QByteArray readBuffer(testBuffer.left(splitPos));
- SequentialBuffer dev(&readBuffer);
- dev.open(QIODevice::ReadOnly);
- QDataStream stream(&dev);
-
- qint8 i8;
- qint16 i16;
- qint32 i32;
- qint64 i64;
- bool b;
- float f;
- double d;
- char *str;
- QByteArray raw(rawData.size(), 0);
-
- forever {
- stream.startTransaction();
- stream >> i8 >> i16 >> i32 >> i64 >> b >> f >> d >> str;
- stream.readRawData(raw.data(), raw.size());
-
- if (stream.commitTransaction())
- break;
-
- QVERIFY(stream.status() == QDataStream::ReadPastEnd);
- QVERIFY(splitPos == 0 || !stream.atEnd());
- QVERIFY(readBuffer.size() < testBuffer.size());
- delete [] str;
- raw.fill(0);
- readBuffer.append(testBuffer.right(testBuffer.size() - splitPos));
- }
-
- QVERIFY(stream.atEnd());
- QCOMPARE(i8, i8Data);
- QCOMPARE(i16, i16Data);
- QCOMPARE(i32, i32Data);
- QCOMPARE(i64, i64Data);
- QCOMPARE(b, bData);
- QCOMPARE(f, fData);
- QCOMPARE(d, dData);
- QVERIFY(strData == str);
- delete [] str;
- QCOMPARE(raw, rawData);
- }
-}
-
-void tst_QDataStream::nestedTransactionsResult_data()
-{
- QTest::addColumn<bool>("commitFirst");
- QTest::addColumn<bool>("rollbackFirst");
- QTest::addColumn<bool>("commitSecond");
- QTest::addColumn<bool>("rollbackSecond");
- QTest::addColumn<bool>("successExpected");
- QTest::addColumn<bool>("expectedAtEnd");
- QTest::addColumn<int>("expectedStatus");
-
- QTest::newRow("1") << false << false << false << false
- << false << true << int(QDataStream::ReadCorruptData);
- QTest::newRow("2") << false << false << false << true
- << false << true << int(QDataStream::ReadCorruptData);
- QTest::newRow("3") << false << false << true << false
- << false << true << int(QDataStream::ReadCorruptData);
-
- QTest::newRow("4") << false << true << false << false
- << false << true << int(QDataStream::ReadCorruptData);
- QTest::newRow("5") << false << true << false << true
- << false << false << int(QDataStream::ReadPastEnd);
- QTest::newRow("6") << false << true << true << false
- << false << false << int(QDataStream::ReadPastEnd);
-
- QTest::newRow("7") << true << false << false << false
- << false << true << int(QDataStream::ReadCorruptData);
- QTest::newRow("8") << true << false << false << true
- << false << false << int(QDataStream::ReadPastEnd);
- QTest::newRow("9") << true << false << true << false
- << true << true << int(QDataStream::Ok);
-}
-
-void tst_QDataStream::nestedTransactionsResult()
-{
- QByteArray testBuffer(1, 0);
- QDataStream stream(&testBuffer, QIODevice::ReadOnly);
- uchar c;
-
- QFETCH(bool, commitFirst);
- QFETCH(bool, rollbackFirst);
- QFETCH(bool, commitSecond);
- QFETCH(bool, rollbackSecond);
- QFETCH(bool, successExpected);
- QFETCH(bool, expectedAtEnd);
- QFETCH(int, expectedStatus);
-
- stream.startTransaction();
- stream.startTransaction();
- stream >> c;
-
- if (commitFirst)
- QVERIFY(stream.commitTransaction());
- else if (rollbackFirst)
- stream.rollbackTransaction();
- else
- stream.abortTransaction();
-
- stream.startTransaction();
-
- if (commitSecond)
- QCOMPARE(stream.commitTransaction(), commitFirst);
- else if (rollbackSecond)
- stream.rollbackTransaction();
- else
- stream.abortTransaction();
-
- QCOMPARE(stream.commitTransaction(), successExpected);
- QCOMPARE(stream.atEnd(), expectedAtEnd);
- QCOMPARE(int(stream.status()), expectedStatus);
-}
-
-QTEST_MAIN(tst_QDataStream)
-#include "tst_qdatastream.moc"
-
diff --git a/tests/auto/corelib/io/qtextstream/.gitattributes b/tests/auto/corelib/io/qtextstream/.gitattributes
deleted file mode 100644
index eb78a3cecf..0000000000
--- a/tests/auto/corelib/io/qtextstream/.gitattributes
+++ /dev/null
@@ -1,3 +0,0 @@
-rfc3261.txt -crlf
-task113817.txt -crlf
-shift-jis.txt -crlf
diff --git a/tests/auto/corelib/io/qtextstream/.gitignore b/tests/auto/corelib/io/qtextstream/.gitignore
deleted file mode 100644
index 01f26ae749..0000000000
--- a/tests/auto/corelib/io/qtextstream/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-bom.txt
-out.txt
-readAllStdinProcess/readAllStdinProcess
-readAllStdinProcess/readAllStdinProcess.exe
-readLineStdinProcess/readLineStdinProcess
-readLineStdinProcess/readLineStdinProcess.exe
-stdinProcess/stdinProcess
-stdinProcess/stdinProcess.exe
-testfile
-tst_qtextstream
-utf8bom
diff --git a/tests/auto/corelib/io/qtextstream/BLACKLIST b/tests/auto/corelib/io/qtextstream/BLACKLIST
deleted file mode 100644
index b54b53cd74..0000000000
--- a/tests/auto/corelib/io/qtextstream/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-[stillOpenWhenAtEnd]
-windows
-winrt
diff --git a/tests/auto/corelib/io/qtextstream/qtextstream.pro b/tests/auto/corelib/io/qtextstream/qtextstream.pro
deleted file mode 100644
index 19853b74ad..0000000000
--- a/tests/auto/corelib/io/qtextstream/qtextstream.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS = test stdinProcess readAllStdinProcess readLineStdinProcess
diff --git a/tests/auto/corelib/io/qtextstream/qtextstream.qrc b/tests/auto/corelib/io/qtextstream/qtextstream.qrc
deleted file mode 100644
index a750e35d4a..0000000000
--- a/tests/auto/corelib/io/qtextstream/qtextstream.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/tst_textstream/">
- <file>resources/big_endian/</file>
- <file>resources/little_endian/</file>
-</qresource>
-</RCC>
diff --git a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp b/tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp
deleted file mode 100644
index 08d2bf8183..0000000000
--- a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtCore/QTextStream>
-#include <stdio.h>
-
-int main(int, char**)
-{
- fprintf(stderr, "%s\n", QTextStream(stdin).readAll().toLatin1().constData());
- return 0;
-}
diff --git a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/readAllStdinProcess.pro b/tests/auto/corelib/io/qtextstream/readAllStdinProcess/readAllStdinProcess.pro
deleted file mode 100644
index 4a4c091dcb..0000000000
--- a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/readAllStdinProcess.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-SOURCES += main.cpp
-QT = core
-CONFIG += console
-CONFIG -= app_bundle
-DESTDIR = ./
-
-# This app is testdata for tst_qtextstream
-target.path = $$[QT_INSTALL_TESTS]/tst_qtextstream/$$TARGET
-INSTALLS += target
diff --git a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/main.cpp b/tests/auto/corelib/io/qtextstream/readLineStdinProcess/main.cpp
deleted file mode 100644
index 41ea5e56f0..0000000000
--- a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/main.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtCore/QCoreApplication>
-#include <QtCore/QTextStream>
-#include <QtCore/QString>
-
-
-int main(int argc, char **argv)
-{
- QCoreApplication a(argc, argv);
- QTextStream qin(stdin);
- QTextStream qerr(stderr);
- QString line;
- do {
- line = qin.readLine();
- if (!line.isNull())
- qerr << line << flush;
- } while (!line.isNull());
- return 0;
-}
diff --git a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/readLineStdinProcess.pro b/tests/auto/corelib/io/qtextstream/readLineStdinProcess/readLineStdinProcess.pro
deleted file mode 100644
index 4a4c091dcb..0000000000
--- a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/readLineStdinProcess.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-SOURCES += main.cpp
-QT = core
-CONFIG += console
-CONFIG -= app_bundle
-DESTDIR = ./
-
-# This app is testdata for tst_qtextstream
-target.path = $$[QT_INSTALL_TESTS]/tst_qtextstream/$$TARGET
-INSTALLS += target
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
deleted file mode 100644
index 849ecb39ed..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
deleted file mode 100644
index 8b9647f06f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
deleted file mode 100644
index d73722e724..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index fcb209d377..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 7939963f78..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index d155ca2863..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
deleted file mode 100644
index 104e45f940..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
deleted file mode 100644
index 3135276780..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
deleted file mode 100644
index 993d0b9e19..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data
deleted file mode 100644
index fcb209d377..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data
deleted file mode 100644
index 7939963f78..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data
deleted file mode 100644
index d155ca2863..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data
deleted file mode 100644
index fa7af8bf5f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
-z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data
deleted file mode 100644
index b516b2c489..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-@ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data
deleted file mode 100644
index fa7af8bf5f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
-z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data
deleted file mode 100644
index b516b2c489..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-@ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data
deleted file mode 100644
index 6def16c99e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data
deleted file mode 100644
index 57302ad8e7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data
deleted file mode 100644
index 239c14d498..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data
deleted file mode 100644
index 8fbd3327c8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data
deleted file mode 100644
index d745e1be7b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index db52135603..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 0a4ca93c16..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e7c7d5a76b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 7501b59181..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 1565aaa95f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
deleted file mode 100644
index 9ac3ad9a6b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
deleted file mode 100644
index bb28df16b9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
deleted file mode 100644
index 8c0f57437b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
deleted file mode 100644
index d494004e64..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
deleted file mode 100644
index de421979ea..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
deleted file mode 100644
index fa7af8bf5f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
-z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
deleted file mode 100644
index b516b2c489..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-@ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data
deleted file mode 100644
index db52135603..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data
deleted file mode 100644
index 0a4ca93c16..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data
deleted file mode 100644
index e7c7d5a76b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data
deleted file mode 100644
index 7501b59181..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data
deleted file mode 100644
index 1565aaa95f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data
deleted file mode 100644
index 849ecb39ed..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data
deleted file mode 100644
index 8b9647f06f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data
deleted file mode 100644
index d73722e724..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index fcb209d377..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 7939963f78..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index d155ca2863..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data
deleted file mode 100644
index 104e45f940..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data
deleted file mode 100644
index 3135276780..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data
deleted file mode 100644
index 993d0b9e19..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data
deleted file mode 100644
index fcb209d377..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data
deleted file mode 100644
index 7939963f78..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data
deleted file mode 100644
index d155ca2863..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data
deleted file mode 100644
index 9280c0d31d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data
deleted file mode 100644
index c227083464..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-0 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data
deleted file mode 100644
index 9280c0d31d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data
deleted file mode 100644
index c227083464..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-0 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data
deleted file mode 100644
index 6def16c99e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data
deleted file mode 100644
index 57302ad8e7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data
deleted file mode 100644
index 239c14d498..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data
deleted file mode 100644
index 819b31d1f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data
deleted file mode 100644
index a6ff072af1..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index db52135603..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 0a4ca93c16..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e7c7d5a76b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index bf9cec8ea7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index ec4665f7ff..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data
deleted file mode 100644
index 9ac3ad9a6b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data
deleted file mode 100644
index bb28df16b9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data
deleted file mode 100644
index 8c0f57437b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data
deleted file mode 100644
index 878dc8a26e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data
deleted file mode 100644
index fd0779e0f3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 9280c0d31d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c227083464..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-0 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data
deleted file mode 100644
index db52135603..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data
deleted file mode 100644
index 0a4ca93c16..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data
deleted file mode 100644
index e7c7d5a76b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data
deleted file mode 100644
index bf9cec8ea7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data
deleted file mode 100644
index ec4665f7ff..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data
deleted file mode 100644
index 80aed3622e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data
deleted file mode 100644
index aec027753d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data
deleted file mode 100644
index 80aed3622e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data
deleted file mode 100644
index aec027753d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data
deleted file mode 100644
index 67ce8d83c8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data
deleted file mode 100644
index 9662a9aaa1..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data
deleted file mode 100644
index a74511b101..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data
deleted file mode 100644
index bdc06a6ec2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data
deleted file mode 100644
index 79b15d4d8a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data
deleted file mode 100644
index 2141e65843..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 61cc689e1e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index cf914bc67e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 5e08ff706a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index b6f4541bb8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
deleted file mode 100644
index f4a50d829a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
deleted file mode 100644
index 2d8f67152c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data
deleted file mode 100644
index e6b94bbeb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data
deleted file mode 100644
index fb0a550264..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data
deleted file mode 100644
index 48fe53930f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data
deleted file mode 100644
index 811e93212d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data
deleted file mode 100644
index 7041fa9b4d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data
deleted file mode 100644
index 9fd21fade0..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data
deleted file mode 100644
index 80aed3622e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data
deleted file mode 100644
index aec027753d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data
deleted file mode 100644
index 61cc689e1e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data
deleted file mode 100644
index cf914bc67e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data
deleted file mode 100644
index 5e08ff706a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data
deleted file mode 100644
index b6f4541bb8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data
deleted file mode 100644
index f4a50d829a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data
deleted file mode 100644
index 2d8f67152c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data
deleted file mode 100644
index 67ce8d83c8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data
deleted file mode 100644
index 9662a9aaa1..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data
deleted file mode 100644
index a74511b101..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data
deleted file mode 100644
index bdc06a6ec2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 61cc689e1e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index cf914bc67e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 5e08ff706a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index b6f4541bb8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data
deleted file mode 100644
index e6b94bbeb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data
deleted file mode 100644
index fb0a550264..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data
deleted file mode 100644
index 48fe53930f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data
deleted file mode 100644
index 811e93212d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data
deleted file mode 100644
index 61cc689e1e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data
deleted file mode 100644
index cf914bc67e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data
deleted file mode 100644
index 5e08ff706a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data
deleted file mode 100644
index b6f4541bb8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data
deleted file mode 100644
index f4aefab396..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data
deleted file mode 100644
index f4aefab396..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data
deleted file mode 100644
index 815d4fc7db..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data
deleted file mode 100644
index c933a04c07..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data
deleted file mode 100644
index 69de5ef2bd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data
deleted file mode 100644
index c45139955a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data
deleted file mode 100644
index 396352f4d6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data
deleted file mode 100644
index ea73fac731..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data
deleted file mode 100644
index 1f4f1a58de..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data
deleted file mode 100644
index 9469ca407f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
deleted file mode 100644
index 18c3344c26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
deleted file mode 100644
index 5193701ae3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
deleted file mode 100644
index fab38d24ef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data
deleted file mode 100644
index ebb14b2fbd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data
deleted file mode 100644
index a9e1432ca9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data
deleted file mode 100644
index b7e6743c28..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data
deleted file mode 100644
index f4aefab396..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data
deleted file mode 100644
index 18c3344c26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data
deleted file mode 100644
index 5193701ae3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data
deleted file mode 100644
index fab38d24ef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data
deleted file mode 100644
index cab2ee4938..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -65534 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data
deleted file mode 100644
index cab2ee4938..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -65534 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data
deleted file mode 100644
index 815d4fc7db..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data
deleted file mode 100644
index c933a04c07..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data
deleted file mode 100644
index 69de5ef2bd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data
deleted file mode 100644
index 40269f4e0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data
deleted file mode 100644
index 396352f4d6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data
deleted file mode 100644
index ea73fac731..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data
deleted file mode 100644
index 1f4f1a58de..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data
deleted file mode 100644
index e8051f8906..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index e50e2d02a9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
deleted file mode 100644
index 18c3344c26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
deleted file mode 100644
index 5193701ae3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
deleted file mode 100644
index 5a9cb07f57..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data
deleted file mode 100644
index e20c76a82c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data
deleted file mode 100644
index ebb14b2fbd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data
deleted file mode 100644
index a9e1432ca9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data
deleted file mode 100644
index f8ec5bc443..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data
deleted file mode 100644
index cab2ee4938..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -65534 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data
deleted file mode 100644
index e50e2d02a9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data
deleted file mode 100644
index 18c3344c26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data
deleted file mode 100644
index 5193701ae3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data
deleted file mode 100644
index 5a9cb07f57..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data
deleted file mode 100644
index 02b7f3ab7b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -254 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data
deleted file mode 100644
index 02b7f3ab7b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -254 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data
deleted file mode 100644
index 396352f4d6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data
deleted file mode 100644
index 815d4fc7db..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data
deleted file mode 100644
index 69de5ef2bd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data
deleted file mode 100644
index 0dc83d2713..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index b951b56531..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data
deleted file mode 100644
index 80d3ca2ef1..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 02b7f3ab7b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -254 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data
deleted file mode 100644
index b951b56531..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data
deleted file mode 100644
index 815d4fc7db..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data
deleted file mode 100644
index c933a04c07..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data
deleted file mode 100644
index 69de5ef2bd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data
deleted file mode 100644
index c45139955a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data
deleted file mode 100644
index 815d4fc7db..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data
deleted file mode 100644
index c933a04c07..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data
deleted file mode 100644
index 69de5ef2bd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data
deleted file mode 100644
index 40269f4e0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index e50e2d02a9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
deleted file mode 100644
index e20c76a82c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data
deleted file mode 100644
index e50e2d02a9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data
deleted file mode 100644
index feac21f921..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data
deleted file mode 100644
index 815d4fc7db..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data
deleted file mode 100644
index c933a04c07..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data
deleted file mode 100644
index 69de5ef2bd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data
deleted file mode 100644
index c45139955a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource0.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource0.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource0.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource1.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource1.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource1.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource10.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource10.data
deleted file mode 100644
index 597f94465c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource10.data
+++ /dev/null
@@ -1 +0,0 @@
-I-am-a-string \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource11.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource11.data
deleted file mode 100644
index 597f94465c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource11.data
+++ /dev/null
@@ -1 +0,0 @@
-I-am-a-string \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource12.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource12.data
deleted file mode 100644
index 597f94465c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource12.data
+++ /dev/null
@@ -1 +0,0 @@
-I-am-a-string \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource2.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource2.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource2.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource20.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource20.data
deleted file mode 100644
index b9e3a5a7c7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource20.data
+++ /dev/null
@@ -1 +0,0 @@
-フ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource21.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource21.data
deleted file mode 100644
index 7014dc882f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource21.data
+++ /dev/null
@@ -1 +0,0 @@
-賿 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource3.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource3.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource3.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource4.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource4.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource4.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource5.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource5.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource5.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource6.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource6.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource6.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource7.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource7.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource7.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource8.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource8.data
deleted file mode 100644
index 4f3af7006e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource8.data
+++ /dev/null
@@ -1 +0,0 @@
-3.1415 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource9.data b/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource9.data
deleted file mode 100644
index 4f3af7006e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource9.data
+++ /dev/null
@@ -1 +0,0 @@
-3.1415 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
deleted file mode 100644
index 4d5bdc553e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
deleted file mode 100644
index 3cf181c23c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
deleted file mode 100644
index f7f74e56a0..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index e2df5e2ee7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
@@ -1 +0,0 @@
-þÿ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index fcb209d377..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 7939963f78..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index d155ca2863..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
deleted file mode 100644
index 104e45f940..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
deleted file mode 100644
index 3135276780..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
deleted file mode 100644
index 993d0b9e19..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data
deleted file mode 100644
index 104e45f940..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data
deleted file mode 100644
index 3135276780..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data
deleted file mode 100644
index 993d0b9e19..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data
deleted file mode 100644
index fa7af8bf5f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
-z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data
deleted file mode 100644
index b516b2c489..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-@ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data
deleted file mode 100644
index fa7af8bf5f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
-z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data
deleted file mode 100644
index b516b2c489..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-@ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data
deleted file mode 100644
index e2b43e3781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data
deleted file mode 100644
index 962fc922ad..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data
deleted file mode 100644
index 839cc09ec8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data
deleted file mode 100644
index f71ac66a63..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data
deleted file mode 100644
index 88f99805e3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index db52135603..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 0a4ca93c16..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e7c7d5a76b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 7501b59181..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 1565aaa95f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
deleted file mode 100644
index 9ac3ad9a6b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
deleted file mode 100644
index bb28df16b9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
deleted file mode 100644
index 8c0f57437b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
deleted file mode 100644
index d494004e64..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
deleted file mode 100644
index de421979ea..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
deleted file mode 100644
index fa7af8bf5f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
-z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
deleted file mode 100644
index b516b2c489..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-@ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data
deleted file mode 100644
index 9ac3ad9a6b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data
deleted file mode 100644
index bb28df16b9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data
deleted file mode 100644
index 8c0f57437b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data
deleted file mode 100644
index d494004e64..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data
deleted file mode 100644
index de421979ea..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data
deleted file mode 100644
index 4d5bdc553e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data
deleted file mode 100644
index 3cf181c23c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data
deleted file mode 100644
index f7f74e56a0..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index fcb209d377..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 7939963f78..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index d155ca2863..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data
deleted file mode 100644
index 104e45f940..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data
deleted file mode 100644
index 3135276780..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data
deleted file mode 100644
index 993d0b9e19..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
+++ /dev/null
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1910281566..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-foo \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
deleted file mode 100644
index a907ec3f43..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1,2 +0,0 @@
-foo
-bar \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 61cd46aacc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-cjacka ckha cka ckah ckac kahckadhcbkgdk vkzdfbvajef vkahv \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data
deleted file mode 100644
index 46b134b197..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data
+++ /dev/null
@@ -1 +0,0 @@
-ÿþ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data
deleted file mode 100644
index 104e45f940..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data
deleted file mode 100644
index 3135276780..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data
deleted file mode 100644
index 993d0b9e19..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data
deleted file mode 100644
index 9280c0d31d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data
deleted file mode 100644
index c227083464..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
-0 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data
deleted file mode 100644
index 9280c0d31d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data
deleted file mode 100644
index c227083464..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
-0 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data
deleted file mode 100644
index e2b43e3781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data
deleted file mode 100644
index 962fc922ad..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data
deleted file mode 100644
index 839cc09ec8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data
deleted file mode 100644
index c33473a370..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data
deleted file mode 100644
index def7fcb589..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index db52135603..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 0a4ca93c16..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e7c7d5a76b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index bf9cec8ea7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index ec4665f7ff..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data
deleted file mode 100644
index 9ac3ad9a6b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data
deleted file mode 100644
index bb28df16b9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data
deleted file mode 100644
index 8c0f57437b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data
deleted file mode 100644
index 878dc8a26e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data
deleted file mode 100644
index fd0779e0f3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 8c7e5a667f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 7371f47a6f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
-B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 9280c0d31d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c227083464..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
-0 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data
deleted file mode 100644
index 9ac3ad9a6b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data
deleted file mode 100644
index bb28df16b9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data
deleted file mode 100644
index 8c0f57437b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data
deleted file mode 100644
index 878dc8a26e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data
deleted file mode 100644
index fd0779e0f3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data
deleted file mode 100644
index 80aed3622e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data
deleted file mode 100644
index aec027753d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data
deleted file mode 100644
index 80aed3622e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data
deleted file mode 100644
index aec027753d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data
deleted file mode 100644
index fb911f7352..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data
deleted file mode 100644
index efbc06bf26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data
deleted file mode 100644
index 4d857caa13..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data
deleted file mode 100644
index b125e2084f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data
deleted file mode 100644
index f39fbde113..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data
deleted file mode 100644
index 5436b427ed..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 61cc689e1e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index cf914bc67e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 5e08ff706a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index b6f4541bb8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
deleted file mode 100644
index f4a50d829a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
deleted file mode 100644
index 2d8f67152c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data
deleted file mode 100644
index e6b94bbeb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data
deleted file mode 100644
index fb0a550264..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data
deleted file mode 100644
index 48fe53930f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data
deleted file mode 100644
index 811e93212d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data
deleted file mode 100644
index 7041fa9b4d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data
deleted file mode 100644
index 9fd21fade0..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data
deleted file mode 100644
index 80aed3622e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data
deleted file mode 100644
index aec027753d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1.23456789 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data
deleted file mode 100644
index e6b94bbeb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data
deleted file mode 100644
index fb0a550264..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data
deleted file mode 100644
index 48fe53930f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data
deleted file mode 100644
index 811e93212d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data
deleted file mode 100644
index 7041fa9b4d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data
deleted file mode 100644
index 9fd21fade0..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data
deleted file mode 100644
index fb911f7352..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data
deleted file mode 100644
index efbc06bf26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data
deleted file mode 100644
index 4d857caa13..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data
deleted file mode 100644
index b125e2084f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index 61cc689e1e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index cf914bc67e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 5e08ff706a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index b6f4541bb8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data
deleted file mode 100644
index e6b94bbeb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data
deleted file mode 100644
index fb0a550264..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data
deleted file mode 100644
index 48fe53930f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data
deleted file mode 100644
index 811e93212d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data
deleted file mode 100644
index d2fa166d7d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 1d0fa9e6a6..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A -0.0001 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data
deleted file mode 100644
index e47d45c143..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 47ce07d283..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -3.45678 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data
deleted file mode 100644
index e6b94bbeb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data
deleted file mode 100644
index fb0a550264..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data
deleted file mode 100644
index 48fe53930f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data
deleted file mode 100644
index 811e93212d..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data
deleted file mode 100644
index f4aefab396..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data
deleted file mode 100644
index f4aefab396..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data
deleted file mode 100644
index ee113d1cf3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data
deleted file mode 100644
index 1e07040ef4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data
deleted file mode 100644
index cc7ab7dff8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data
deleted file mode 100644
index 450072bc4e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data
deleted file mode 100644
index 73f5f259f8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data
deleted file mode 100644
index 9805422dfb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data
deleted file mode 100644
index 77f557a494..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data
deleted file mode 100644
index 8dd6a4b38e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
deleted file mode 100644
index 18c3344c26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
deleted file mode 100644
index 5193701ae3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
deleted file mode 100644
index fab38d24ef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data
deleted file mode 100644
index ebb14b2fbd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data
deleted file mode 100644
index a9e1432ca9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data
deleted file mode 100644
index b7e6743c28..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data
deleted file mode 100644
index f4aefab396..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data
deleted file mode 100644
index ebb14b2fbd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data
deleted file mode 100644
index a9e1432ca9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data
deleted file mode 100644
index b7e6743c28..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data
deleted file mode 100644
index cab2ee4938..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -65534 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data
deleted file mode 100644
index cab2ee4938..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -65534 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data
deleted file mode 100644
index ee113d1cf3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data
deleted file mode 100644
index 1e07040ef4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data
deleted file mode 100644
index cc7ab7dff8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data
deleted file mode 100644
index beea1c3663..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data
deleted file mode 100644
index 73f5f259f8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data
deleted file mode 100644
index 9805422dfb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data
deleted file mode 100644
index 77f557a494..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data
deleted file mode 100644
index be6f22a5ea..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index e50e2d02a9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
deleted file mode 100644
index 18c3344c26..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
deleted file mode 100644
index 5193701ae3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
deleted file mode 100644
index 5a9cb07f57..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data
deleted file mode 100644
index e20c76a82c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data
deleted file mode 100644
index ebb14b2fbd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data
deleted file mode 100644
index a9e1432ca9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data
deleted file mode 100644
index f8ec5bc443..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data
deleted file mode 100644
index f171cb6c0c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data
+++ /dev/null
@@ -1 +0,0 @@
- A -10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data
deleted file mode 100644
index de18d40ee8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data
+++ /dev/null
@@ -1 +0,0 @@
- A -255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data
deleted file mode 100644
index cab2ee4938..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data
+++ /dev/null
@@ -1 +0,0 @@
- A -65534 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data
deleted file mode 100644
index e20c76a82c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data
deleted file mode 100644
index ebb14b2fbd..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data
deleted file mode 100644
index a9e1432ca9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data
deleted file mode 100644
index f8ec5bc443..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data
deleted file mode 100644
index 02b7f3ab7b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -254 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data
deleted file mode 100644
index 02b7f3ab7b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -254 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data
deleted file mode 100644
index 73f5f259f8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data
deleted file mode 100644
index ee113d1cf3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data
deleted file mode 100644
index cc7ab7dff8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data
deleted file mode 100644
index 584b17ea18..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index c52b277d9c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index b951b56531..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data
deleted file mode 100644
index 80d3ca2ef1..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data
deleted file mode 100644
index ef70e7dc3a..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A -1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data
deleted file mode 100644
index 02b7f3ab7b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A -254 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data
deleted file mode 100644
index 95742ec8f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data
deleted file mode 100644
index 80d3ca2ef1..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data
deleted file mode 100644
index ee113d1cf3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data
deleted file mode 100644
index 1e07040ef4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data
deleted file mode 100644
index cc7ab7dff8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data
deleted file mode 100644
index 450072bc4e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data
deleted file mode 100644
index ee113d1cf3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data
deleted file mode 100644
index 1e07040ef4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data
deleted file mode 100644
index cc7ab7dff8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data
deleted file mode 100644
index beea1c3663..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index e50e2d02a9..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
deleted file mode 100644
index e20c76a82c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
deleted file mode 100644
index f667f77c45..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 65535 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data
deleted file mode 100644
index e20c76a82c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data
deleted file mode 100644
index 775ae0f25b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data
deleted file mode 100644
index ee113d1cf3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data
deleted file mode 100644
index 1e07040ef4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data
deleted file mode 100644
index cc7ab7dff8..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data
deleted file mode 100644
index 450072bc4e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
deleted file mode 100644
index 2262f5ecdb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
deleted file mode 100644
index d7a098948e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
deleted file mode 100644
index e333a695b7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
deleted file mode 100644
index 18bb47b042..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
deleted file mode 100644
index 9a9a22daef..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
deleted file mode 100644
index 35282318cb..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
+++ /dev/null
@@ -1 +0,0 @@
- A 0 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
deleted file mode 100644
index 30c3a50213..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
+++ /dev/null
@@ -1 +0,0 @@
- A 1 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
deleted file mode 100644
index 9d64c07ef2..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
+++ /dev/null
@@ -1 +0,0 @@
- A 10 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
deleted file mode 100644
index 6b37eb602b..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
+++ /dev/null
@@ -1 +0,0 @@
- A 255 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
deleted file mode 100644
index c0e22423bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
+++ /dev/null
@@ -1 +0,0 @@
- A 512 B \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data
deleted file mode 100644
index 379e87b914..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data
deleted file mode 100644
index 2785156fb3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data
deleted file mode 100644
index 6dc818abc3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data
deleted file mode 100644
index d41a1f75d3..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data
deleted file mode 100644
index f5a0d874d4..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data
+++ /dev/null
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource0.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource0.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource0.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource1.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource1.data
deleted file mode 100644
index 0f13712411..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource1.data
+++ /dev/null
@@ -1 +0,0 @@
-Z \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource10.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource10.data
deleted file mode 100644
index 597f94465c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource10.data
+++ /dev/null
@@ -1 +0,0 @@
-I-am-a-string \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource11.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource11.data
deleted file mode 100644
index 597f94465c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource11.data
+++ /dev/null
@@ -1 +0,0 @@
-I-am-a-string \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource12.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource12.data
deleted file mode 100644
index 597f94465c..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource12.data
+++ /dev/null
@@ -1 +0,0 @@
-I-am-a-string \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource2.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource2.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource2.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource20.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource20.data
deleted file mode 100644
index b9e3a5a7c7..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource20.data
+++ /dev/null
@@ -1 +0,0 @@
-フ \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource21.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource21.data
deleted file mode 100644
index 7014dc882f..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource21.data
+++ /dev/null
@@ -1 +0,0 @@
-賿 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource3.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource3.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource3.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource4.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource4.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource4.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource5.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource5.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource5.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource6.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource6.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource6.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource7.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource7.data
deleted file mode 100644
index bd41cba781..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource7.data
+++ /dev/null
@@ -1 +0,0 @@
-12345 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource8.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource8.data
deleted file mode 100644
index 4f3af7006e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource8.data
+++ /dev/null
@@ -1 +0,0 @@
-3.1415 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource9.data b/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource9.data
deleted file mode 100644
index 4f3af7006e..0000000000
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource9.data
+++ /dev/null
@@ -1 +0,0 @@
-3.1415 \ No newline at end of file
diff --git a/tests/auto/corelib/io/qtextstream/rfc3261.txt b/tests/auto/corelib/io/qtextstream/rfc3261.txt
deleted file mode 100644
index 4cf4df93bc..0000000000
--- a/tests/auto/corelib/io/qtextstream/rfc3261.txt
+++ /dev/null
@@ -1,15067 +0,0 @@
-
-
-
-
-
-
-Network Working Group J. Rosenberg
-Request for Comments: 3261 dynamicsoft
-Obsoletes: 2543 H. Schulzrinne
-Category: Standards Track Columbia U.
- G. Camarillo
- Ericsson
- A. Johnston
- WorldCom
- J. Peterson
- Neustar
- R. Sparks
- dynamicsoft
- M. Handley
- ICIR
- E. Schooler
- AT&T
- June 2002
-
- SIP: Session Initiation Protocol
-
-Status of this Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2002). All Rights Reserved.
-
-Abstract
-
- This document describes Session Initiation Protocol (SIP), an
- application-layer control (signaling) protocol for creating,
- modifying, and terminating sessions with one or more participants.
- These sessions include Internet telephone calls, multimedia
- distribution, and multimedia conferences.
-
- SIP invitations used to create sessions carry session descriptions
- that allow participants to agree on a set of compatible media types.
- SIP makes use of elements called proxy servers to help route requests
- to the user's current location, authenticate and authorize users for
- services, implement provider call-routing policies, and provide
- features to users. SIP also provides a registration function that
- allows users to upload their current locations for use by proxy
- servers. SIP runs on top of several different transport protocols.
-
-
-
-Rosenberg, et. al. Standards Track [Page 1]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Table of Contents
-
- 1 Introduction ........................................ 8
- 2 Overview of SIP Functionality ....................... 9
- 3 Terminology ......................................... 10
- 4 Overview of Operation ............................... 10
- 5 Structure of the Protocol ........................... 18
- 6 Definitions ......................................... 20
- 7 SIP Messages ........................................ 26
- 7.1 Requests ............................................ 27
- 7.2 Responses ........................................... 28
- 7.3 Header Fields ....................................... 29
- 7.3.1 Header Field Format ................................. 30
- 7.3.2 Header Field Classification ......................... 32
- 7.3.3 Compact Form ........................................ 32
- 7.4 Bodies .............................................. 33
- 7.4.1 Message Body Type ................................... 33
- 7.4.2 Message Body Length ................................. 33
- 7.5 Framing SIP Messages ................................ 34
- 8 General User Agent Behavior ......................... 34
- 8.1 UAC Behavior ........................................ 35
- 8.1.1 Generating the Request .............................. 35
- 8.1.1.1 Request-URI ......................................... 35
- 8.1.1.2 To .................................................. 36
- 8.1.1.3 From ................................................ 37
- 8.1.1.4 Call-ID ............................................. 37
- 8.1.1.5 CSeq ................................................ 38
- 8.1.1.6 Max-Forwards ........................................ 38
- 8.1.1.7 Via ................................................. 39
- 8.1.1.8 Contact ............................................. 40
- 8.1.1.9 Supported and Require ............................... 40
- 8.1.1.10 Additional Message Components ....................... 41
- 8.1.2 Sending the Request ................................. 41
- 8.1.3 Processing Responses ................................ 42
- 8.1.3.1 Transaction Layer Errors ............................ 42
- 8.1.3.2 Unrecognized Responses .............................. 42
- 8.1.3.3 Vias ................................................ 43
- 8.1.3.4 Processing 3xx Responses ............................ 43
- 8.1.3.5 Processing 4xx Responses ............................ 45
- 8.2 UAS Behavior ........................................ 46
- 8.2.1 Method Inspection ................................... 46
- 8.2.2 Header Inspection ................................... 46
- 8.2.2.1 To and Request-URI .................................. 46
- 8.2.2.2 Merged Requests ..................................... 47
- 8.2.2.3 Require ............................................. 47
- 8.2.3 Content Processing .................................. 48
- 8.2.4 Applying Extensions ................................. 49
- 8.2.5 Processing the Request .............................. 49
-
-
-
-Rosenberg, et. al. Standards Track [Page 2]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 8.2.6 Generating the Response ............................. 49
- 8.2.6.1 Sending a Provisional Response ...................... 49
- 8.2.6.2 Headers and Tags .................................... 50
- 8.2.7 Stateless UAS Behavior .............................. 50
- 8.3 Redirect Servers .................................... 51
- 9 Canceling a Request ................................. 53
- 9.1 Client Behavior ..................................... 53
- 9.2 Server Behavior ..................................... 55
- 10 Registrations ....................................... 56
- 10.1 Overview ............................................ 56
- 10.2 Constructing the REGISTER Request ................... 57
- 10.2.1 Adding Bindings ..................................... 59
- 10.2.1.1 Setting the Expiration Interval of Contact Addresses 60
- 10.2.1.2 Preferences among Contact Addresses ................. 61
- 10.2.2 Removing Bindings ................................... 61
- 10.2.3 Fetching Bindings ................................... 61
- 10.2.4 Refreshing Bindings ................................. 61
- 10.2.5 Setting the Internal Clock .......................... 62
- 10.2.6 Discovering a Registrar ............................. 62
- 10.2.7 Transmitting a Request .............................. 62
- 10.2.8 Error Responses ..................................... 63
- 10.3 Processing REGISTER Requests ........................ 63
- 11 Querying for Capabilities ........................... 66
- 11.1 Construction of OPTIONS Request ..................... 67
- 11.2 Processing of OPTIONS Request ....................... 68
- 12 Dialogs ............................................. 69
- 12.1 Creation of a Dialog ................................ 70
- 12.1.1 UAS behavior ........................................ 70
- 12.1.2 UAC Behavior ........................................ 71
- 12.2 Requests within a Dialog ............................ 72
- 12.2.1 UAC Behavior ........................................ 73
- 12.2.1.1 Generating the Request .............................. 73
- 12.2.1.2 Processing the Responses ............................ 75
- 12.2.2 UAS Behavior ........................................ 76
- 12.3 Termination of a Dialog ............................. 77
- 13 Initiating a Session ................................ 77
- 13.1 Overview ............................................ 77
- 13.2 UAC Processing ...................................... 78
- 13.2.1 Creating the Initial INVITE ......................... 78
- 13.2.2 Processing INVITE Responses ......................... 81
- 13.2.2.1 1xx Responses ....................................... 81
- 13.2.2.2 3xx Responses ....................................... 81
- 13.2.2.3 4xx, 5xx and 6xx Responses .......................... 81
- 13.2.2.4 2xx Responses ....................................... 82
- 13.3 UAS Processing ...................................... 83
- 13.3.1 Processing of the INVITE ............................ 83
- 13.3.1.1 Progress ............................................ 84
- 13.3.1.2 The INVITE is Redirected ............................ 84
-
-
-
-Rosenberg, et. al. Standards Track [Page 3]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 13.3.1.3 The INVITE is Rejected .............................. 85
- 13.3.1.4 The INVITE is Accepted .............................. 85
- 14 Modifying an Existing Session ....................... 86
- 14.1 UAC Behavior ........................................ 86
- 14.2 UAS Behavior ........................................ 88
- 15 Terminating a Session ............................... 89
- 15.1 Terminating a Session with a BYE Request ............ 90
- 15.1.1 UAC Behavior ........................................ 90
- 15.1.2 UAS Behavior ........................................ 91
- 16 Proxy Behavior ...................................... 91
- 16.1 Overview ............................................ 91
- 16.2 Stateful Proxy ...................................... 92
- 16.3 Request Validation .................................. 94
- 16.4 Route Information Preprocessing ..................... 96
- 16.5 Determining Request Targets ......................... 97
- 16.6 Request Forwarding .................................. 99
- 16.7 Response Processing ................................. 107
- 16.8 Processing Timer C .................................. 114
- 16.9 Handling Transport Errors ........................... 115
- 16.10 CANCEL Processing ................................... 115
- 16.11 Stateless Proxy ..................................... 116
- 16.12 Summary of Proxy Route Processing ................... 118
- 16.12.1 Examples ............................................ 118
- 16.12.1.1 Basic SIP Trapezoid ................................. 118
- 16.12.1.2 Traversing a Strict-Routing Proxy ................... 120
- 16.12.1.3 Rewriting Record-Route Header Field Values .......... 121
- 17 Transactions ........................................ 122
- 17.1 Client Transaction .................................. 124
- 17.1.1 INVITE Client Transaction ........................... 125
- 17.1.1.1 Overview of INVITE Transaction ...................... 125
- 17.1.1.2 Formal Description .................................. 125
- 17.1.1.3 Construction of the ACK Request ..................... 129
- 17.1.2 Non-INVITE Client Transaction ....................... 130
- 17.1.2.1 Overview of the non-INVITE Transaction .............. 130
- 17.1.2.2 Formal Description .................................. 131
- 17.1.3 Matching Responses to Client Transactions ........... 132
- 17.1.4 Handling Transport Errors ........................... 133
- 17.2 Server Transaction .................................. 134
- 17.2.1 INVITE Server Transaction ........................... 134
- 17.2.2 Non-INVITE Server Transaction ....................... 137
- 17.2.3 Matching Requests to Server Transactions ............ 138
- 17.2.4 Handling Transport Errors ........................... 141
- 18 Transport ........................................... 141
- 18.1 Clients ............................................. 142
- 18.1.1 Sending Requests .................................... 142
- 18.1.2 Receiving Responses ................................. 144
- 18.2 Servers ............................................. 145
- 18.2.1 Receiving Requests .................................. 145
-
-
-
-Rosenberg, et. al. Standards Track [Page 4]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 18.2.2 Sending Responses ................................... 146
- 18.3 Framing ............................................. 147
- 18.4 Error Handling ...................................... 147
- 19 Common Message Components ........................... 147
- 19.1 SIP and SIPS Uniform Resource Indicators ............ 148
- 19.1.1 SIP and SIPS URI Components ......................... 148
- 19.1.2 Character Escaping Requirements ..................... 152
- 19.1.3 Example SIP and SIPS URIs ........................... 153
- 19.1.4 URI Comparison ...................................... 153
- 19.1.5 Forming Requests from a URI ......................... 156
- 19.1.6 Relating SIP URIs and tel URLs ...................... 157
- 19.2 Option Tags ......................................... 158
- 19.3 Tags ................................................ 159
- 20 Header Fields ....................................... 159
- 20.1 Accept .............................................. 161
- 20.2 Accept-Encoding ..................................... 163
- 20.3 Accept-Language ..................................... 164
- 20.4 Alert-Info .......................................... 164
- 20.5 Allow ............................................... 165
- 20.6 Authentication-Info ................................. 165
- 20.7 Authorization ....................................... 165
- 20.8 Call-ID ............................................. 166
- 20.9 Call-Info ........................................... 166
- 20.10 Contact ............................................. 167
- 20.11 Content-Disposition ................................. 168
- 20.12 Content-Encoding .................................... 169
- 20.13 Content-Language .................................... 169
- 20.14 Content-Length ...................................... 169
- 20.15 Content-Type ........................................ 170
- 20.16 CSeq ................................................ 170
- 20.17 Date ................................................ 170
- 20.18 Error-Info .......................................... 171
- 20.19 Expires ............................................. 171
- 20.20 From ................................................ 172
- 20.21 In-Reply-To ......................................... 172
- 20.22 Max-Forwards ........................................ 173
- 20.23 Min-Expires ......................................... 173
- 20.24 MIME-Version ........................................ 173
- 20.25 Organization ........................................ 174
- 20.26 Priority ............................................ 174
- 20.27 Proxy-Authenticate .................................. 174
- 20.28 Proxy-Authorization ................................. 175
- 20.29 Proxy-Require ....................................... 175
- 20.30 Record-Route ........................................ 175
- 20.31 Reply-To ............................................ 176
- 20.32 Require ............................................. 176
- 20.33 Retry-After ......................................... 176
- 20.34 Route ............................................... 177
-
-
-
-Rosenberg, et. al. Standards Track [Page 5]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 20.35 Server .............................................. 177
- 20.36 Subject ............................................. 177
- 20.37 Supported ........................................... 178
- 20.38 Timestamp ........................................... 178
- 20.39 To .................................................. 178
- 20.40 Unsupported ......................................... 179
- 20.41 User-Agent .......................................... 179
- 20.42 Via ................................................. 179
- 20.43 Warning ............................................. 180
- 20.44 WWW-Authenticate .................................... 182
- 21 Response Codes ...................................... 182
- 21.1 Provisional 1xx ..................................... 182
- 21.1.1 100 Trying .......................................... 183
- 21.1.2 180 Ringing ......................................... 183
- 21.1.3 181 Call Is Being Forwarded ......................... 183
- 21.1.4 182 Queued .......................................... 183
- 21.1.5 183 Session Progress ................................ 183
- 21.2 Successful 2xx ...................................... 183
- 21.2.1 200 OK .............................................. 183
- 21.3 Redirection 3xx ..................................... 184
- 21.3.1 300 Multiple Choices ................................ 184
- 21.3.2 301 Moved Permanently ............................... 184
- 21.3.3 302 Moved Temporarily ............................... 184
- 21.3.4 305 Use Proxy ....................................... 185
- 21.3.5 380 Alternative Service ............................. 185
- 21.4 Request Failure 4xx ................................. 185
- 21.4.1 400 Bad Request ..................................... 185
- 21.4.2 401 Unauthorized .................................... 185
- 21.4.3 402 Payment Required ................................ 186
- 21.4.4 403 Forbidden ....................................... 186
- 21.4.5 404 Not Found ....................................... 186
- 21.4.6 405 Method Not Allowed .............................. 186
- 21.4.7 406 Not Acceptable .................................. 186
- 21.4.8 407 Proxy Authentication Required ................... 186
- 21.4.9 408 Request Timeout ................................. 186
- 21.4.10 410 Gone ............................................ 187
- 21.4.11 413 Request Entity Too Large ........................ 187
- 21.4.12 414 Request-URI Too Long ............................ 187
- 21.4.13 415 Unsupported Media Type .......................... 187
- 21.4.14 416 Unsupported URI Scheme .......................... 187
- 21.4.15 420 Bad Extension ................................... 187
- 21.4.16 421 Extension Required .............................. 188
- 21.4.17 423 Interval Too Brief .............................. 188
- 21.4.18 480 Temporarily Unavailable ......................... 188
- 21.4.19 481 Call/Transaction Does Not Exist ................. 188
- 21.4.20 482 Loop Detected ................................... 188
- 21.4.21 483 Too Many Hops ................................... 189
- 21.4.22 484 Address Incomplete .............................. 189
-
-
-
-Rosenberg, et. al. Standards Track [Page 6]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 21.4.23 485 Ambiguous ....................................... 189
- 21.4.24 486 Busy Here ....................................... 189
- 21.4.25 487 Request Terminated .............................. 190
- 21.4.26 488 Not Acceptable Here ............................. 190
- 21.4.27 491 Request Pending ................................. 190
- 21.4.28 493 Undecipherable .................................. 190
- 21.5 Server Failure 5xx .................................. 190
- 21.5.1 500 Server Internal Error ........................... 190
- 21.5.2 501 Not Implemented ................................. 191
- 21.5.3 502 Bad Gateway ..................................... 191
- 21.5.4 503 Service Unavailable ............................. 191
- 21.5.5 504 Server Time-out ................................. 191
- 21.5.6 505 Version Not Supported ........................... 192
- 21.5.7 513 Message Too Large ............................... 192
- 21.6 Global Failures 6xx ................................. 192
- 21.6.1 600 Busy Everywhere ................................. 192
- 21.6.2 603 Decline ......................................... 192
- 21.6.3 604 Does Not Exist Anywhere ......................... 192
- 21.6.4 606 Not Acceptable .................................. 192
- 22 Usage of HTTP Authentication ........................ 193
- 22.1 Framework ........................................... 193
- 22.2 User-to-User Authentication ......................... 195
- 22.3 Proxy-to-User Authentication ........................ 197
- 22.4 The Digest Authentication Scheme .................... 199
- 23 S/MIME .............................................. 201
- 23.1 S/MIME Certificates ................................. 201
- 23.2 S/MIME Key Exchange ................................. 202
- 23.3 Securing MIME bodies ................................ 205
- 23.4 SIP Header Privacy and Integrity using S/MIME:
- Tunneling SIP ....................................... 207
- 23.4.1 Integrity and Confidentiality Properties of SIP
- Headers ............................................. 207
- 23.4.1.1 Integrity ........................................... 207
- 23.4.1.2 Confidentiality ..................................... 208
- 23.4.2 Tunneling Integrity and Authentication .............. 209
- 23.4.3 Tunneling Encryption ................................ 211
- 24 Examples ............................................ 213
- 24.1 Registration ........................................ 213
- 24.2 Session Setup ....................................... 214
- 25 Augmented BNF for the SIP Protocol .................. 219
- 25.1 Basic Rules ......................................... 219
- 26 Security Considerations: Threat Model and Security
- Usage Recommendations ............................... 232
- 26.1 Attacks and Threat Models ........................... 233
- 26.1.1 Registration Hijacking .............................. 233
- 26.1.2 Impersonating a Server .............................. 234
- 26.1.3 Tampering with Message Bodies ....................... 235
- 26.1.4 Tearing Down Sessions ............................... 235
-
-
-
-Rosenberg, et. al. Standards Track [Page 7]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 26.1.5 Denial of Service and Amplification ................. 236
- 26.2 Security Mechanisms ................................. 237
- 26.2.1 Transport and Network Layer Security ................ 238
- 26.2.2 SIPS URI Scheme ..................................... 239
- 26.2.3 HTTP Authentication ................................. 240
- 26.2.4 S/MIME .............................................. 240
- 26.3 Implementing Security Mechanisms .................... 241
- 26.3.1 Requirements for Implementers of SIP ................ 241
- 26.3.2 Security Solutions .................................. 242
- 26.3.2.1 Registration ........................................ 242
- 26.3.2.2 Interdomain Requests ................................ 243
- 26.3.2.3 Peer-to-Peer Requests ............................... 245
- 26.3.2.4 DoS Protection ...................................... 246
- 26.4 Limitations ......................................... 247
- 26.4.1 HTTP Digest ......................................... 247
- 26.4.2 S/MIME .............................................. 248
- 26.4.3 TLS ................................................. 249
- 26.4.4 SIPS URIs ........................................... 249
- 26.5 Privacy ............................................. 251
- 27 IANA Considerations ................................. 252
- 27.1 Option Tags ......................................... 252
- 27.2 Warn-Codes .......................................... 252
- 27.3 Header Field Names .................................. 253
- 27.4 Method and Response Codes ........................... 253
- 27.5 The "message/sip" MIME type. ....................... 254
- 27.6 New Content-Disposition Parameter Registrations ..... 255
- 28 Changes From RFC 2543 ............................... 255
- 28.1 Major Functional Changes ............................ 255
- 28.2 Minor Functional Changes ............................ 260
- 29 Normative References ................................ 261
- 30 Informative References .............................. 262
- A Table of Timer Values ............................... 265
- Acknowledgments ................................................ 266
- Authors' Addresses ............................................. 267
- Full Copyright Statement ....................................... 269
-
-1 Introduction
-
- There are many applications of the Internet that require the creation
- and management of a session, where a session is considered an
- exchange of data between an association of participants. The
- implementation of these applications is complicated by the practices
- of participants: users may move between endpoints, they may be
- addressable by multiple names, and they may communicate in several
- different media - sometimes simultaneously. Numerous protocols have
- been authored that carry various forms of real-time multimedia
- session data such as voice, video, or text messages. The Session
- Initiation Protocol (SIP) works in concert with these protocols by
-
-
-
-Rosenberg, et. al. Standards Track [Page 8]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- enabling Internet endpoints (called user agents) to discover one
- another and to agree on a characterization of a session they would
- like to share. For locating prospective session participants, and
- for other functions, SIP enables the creation of an infrastructure of
- network hosts (called proxy servers) to which user agents can send
- registrations, invitations to sessions, and other requests. SIP is
- an agile, general-purpose tool for creating, modifying, and
- terminating sessions that works independently of underlying transport
- protocols and without dependency on the type of session that is being
- established.
-
-2 Overview of SIP Functionality
-
- SIP is an application-layer control protocol that can establish,
- modify, and terminate multimedia sessions (conferences) such as
- Internet telephony calls. SIP can also invite participants to
- already existing sessions, such as multicast conferences. Media can
- be added to (and removed from) an existing session. SIP
- transparently supports name mapping and redirection services, which
- supports personal mobility [27] - users can maintain a single
- externally visible identifier regardless of their network location.
-
- SIP supports five facets of establishing and terminating multimedia
- communications:
-
- User location: determination of the end system to be used for
- communication;
-
- User availability: determination of the willingness of the called
- party to engage in communications;
-
- User capabilities: determination of the media and media parameters
- to be used;
-
- Session setup: "ringing", establishment of session parameters at
- both called and calling party;
-
- Session management: including transfer and termination of
- sessions, modifying session parameters, and invoking
- services.
-
- SIP is not a vertically integrated communications system. SIP is
- rather a component that can be used with other IETF protocols to
- build a complete multimedia architecture. Typically, these
- architectures will include protocols such as the Real-time Transport
- Protocol (RTP) (RFC 1889 [28]) for transporting real-time data and
- providing QoS feedback, the Real-Time streaming protocol (RTSP) (RFC
- 2326 [29]) for controlling delivery of streaming media, the Media
-
-
-
-Rosenberg, et. al. Standards Track [Page 9]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Gateway Control Protocol (MEGACO) (RFC 3015 [30]) for controlling
- gateways to the Public Switched Telephone Network (PSTN), and the
- Session Description Protocol (SDP) (RFC 2327 [1]) for describing
- multimedia sessions. Therefore, SIP should be used in conjunction
- with other protocols in order to provide complete services to the
- users. However, the basic functionality and operation of SIP does
- not depend on any of these protocols.
-
- SIP does not provide services. Rather, SIP provides primitives that
- can be used to implement different services. For example, SIP can
- locate a user and deliver an opaque object to his current location.
- If this primitive is used to deliver a session description written in
- SDP, for instance, the endpoints can agree on the parameters of a
- session. If the same primitive is used to deliver a photo of the
- caller as well as the session description, a "caller ID" service can
- be easily implemented. As this example shows, a single primitive is
- typically used to provide several different services.
-
- SIP does not offer conference control services such as floor control
- or voting and does not prescribe how a conference is to be managed.
- SIP can be used to initiate a session that uses some other conference
- control protocol. Since SIP messages and the sessions they establish
- can pass through entirely different networks, SIP cannot, and does
- not, provide any kind of network resource reservation capabilities.
-
- The nature of the services provided make security particularly
- important. To that end, SIP provides a suite of security services,
- which include denial-of-service prevention, authentication (both user
- to user and proxy to user), integrity protection, and encryption and
- privacy services.
-
- SIP works with both IPv4 and IPv6.
-
-3 Terminology
-
- In this document, the key words "MUST", "MUST NOT", "REQUIRED",
- "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
- RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as
- described in BCP 14, RFC 2119 [2] and indicate requirement levels for
- compliant SIP implementations.
-
-4 Overview of Operation
-
- This section introduces the basic operations of SIP using simple
- examples. This section is tutorial in nature and does not contain
- any normative statements.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 10]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The first example shows the basic functions of SIP: location of an
- end point, signal of a desire to communicate, negotiation of session
- parameters to establish the session, and teardown of the session once
- established.
-
- Figure 1 shows a typical example of a SIP message exchange between
- two users, Alice and Bob. (Each message is labeled with the letter
- "F" and a number for reference by the text.) In this example, Alice
- uses a SIP application on her PC (referred to as a softphone) to call
- Bob on his SIP phone over the Internet. Also shown are two SIP proxy
- servers that act on behalf of Alice and Bob to facilitate the session
- establishment. This typical arrangement is often referred to as the
- "SIP trapezoid" as shown by the geometric shape of the dotted lines
- in Figure 1.
-
- Alice "calls" Bob using his SIP identity, a type of Uniform Resource
- Identifier (URI) called a SIP URI. SIP URIs are defined in Section
- 19.1. It has a similar form to an email address, typically
- containing a username and a host name. In this case, it is
- sip:bob@biloxi.com, where biloxi.com is the domain of Bob's SIP
- service provider. Alice has a SIP URI of sip:alice@atlanta.com.
- Alice might have typed in Bob's URI or perhaps clicked on a hyperlink
- or an entry in an address book. SIP also provides a secure URI,
- called a SIPS URI. An example would be sips:bob@biloxi.com. A call
- made to a SIPS URI guarantees that secure, encrypted transport
- (namely TLS) is used to carry all SIP messages from the caller to the
- domain of the callee. From there, the request is sent securely to
- the callee, but with security mechanisms that depend on the policy of
- the domain of the callee.
-
- SIP is based on an HTTP-like request/response transaction model.
- Each transaction consists of a request that invokes a particular
- method, or function, on the server and at least one response. In
- this example, the transaction begins with Alice's softphone sending
- an INVITE request addressed to Bob's SIP URI. INVITE is an example
- of a SIP method that specifies the action that the requestor (Alice)
- wants the server (Bob) to take. The INVITE request contains a number
- of header fields. Header fields are named attributes that provide
- additional information about a message. The ones present in an
- INVITE include a unique identifier for the call, the destination
- address, Alice's address, and information about the type of session
- that Alice wishes to establish with Bob. The INVITE (message F1 in
- Figure 1) might look like this:
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 11]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- atlanta.com . . . biloxi.com
- . proxy proxy .
- . .
- Alice's . . . . . . . . . . . . . . . . . . . . Bob's
- softphone SIP Phone
- | | | |
- | INVITE F1 | | |
- |--------------->| INVITE F2 | |
- | 100 Trying F3 |--------------->| INVITE F4 |
- |<---------------| 100 Trying F5 |--------------->|
- | |<-------------- | 180 Ringing F6 |
- | | 180 Ringing F7 |<---------------|
- | 180 Ringing F8 |<---------------| 200 OK F9 |
- |<---------------| 200 OK F10 |<---------------|
- | 200 OK F11 |<---------------| |
- |<---------------| | |
- | ACK F12 |
- |------------------------------------------------->|
- | Media Session |
- |<================================================>|
- | BYE F13 |
- |<-------------------------------------------------|
- | 200 OK F14 |
- |------------------------------------------------->|
- | |
-
- Figure 1: SIP session setup example with SIP trapezoid
-
- INVITE sip:bob@biloxi.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
- Max-Forwards: 70
- To: Bob <sip:bob@biloxi.com>
- From: Alice <sip:alice@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710@pc33.atlanta.com
- CSeq: 314159 INVITE
- Contact: <sip:alice@pc33.atlanta.com>
- Content-Type: application/sdp
- Content-Length: 142
-
- (Alice's SDP not shown)
-
- The first line of the text-encoded message contains the method name
- (INVITE). The lines that follow are a list of header fields. This
- example contains a minimum required set. The header fields are
- briefly described below:
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 12]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Via contains the address (pc33.atlanta.com) at which Alice is
- expecting to receive responses to this request. It also contains a
- branch parameter that identifies this transaction.
-
- To contains a display name (Bob) and a SIP or SIPS URI
- (sip:bob@biloxi.com) towards which the request was originally
- directed. Display names are described in RFC 2822 [3].
-
- From also contains a display name (Alice) and a SIP or SIPS URI
- (sip:alice@atlanta.com) that indicate the originator of the request.
- This header field also has a tag parameter containing a random string
- (1928301774) that was added to the URI by the softphone. It is used
- for identification purposes.
-
- Call-ID contains a globally unique identifier for this call,
- generated by the combination of a random string and the softphone's
- host name or IP address. The combination of the To tag, From tag,
- and Call-ID completely defines a peer-to-peer SIP relationship
- between Alice and Bob and is referred to as a dialog.
-
- CSeq or Command Sequence contains an integer and a method name. The
- CSeq number is incremented for each new request within a dialog and
- is a traditional sequence number.
-
- Contact contains a SIP or SIPS URI that represents a direct route to
- contact Alice, usually composed of a username at a fully qualified
- domain name (FQDN). While an FQDN is preferred, many end systems do
- not have registered domain names, so IP addresses are permitted.
- While the Via header field tells other elements where to send the
- response, the Contact header field tells other elements where to send
- future requests.
-
- Max-Forwards serves to limit the number of hops a request can make on
- the way to its destination. It consists of an integer that is
- decremented by one at each hop.
-
- Content-Type contains a description of the message body (not shown).
-
- Content-Length contains an octet (byte) count of the message body.
-
- The complete set of SIP header fields is defined in Section 20.
-
- The details of the session, such as the type of media, codec, or
- sampling rate, are not described using SIP. Rather, the body of a
- SIP message contains a description of the session, encoded in some
- other protocol format. One such format is the Session Description
- Protocol (SDP) (RFC 2327 [1]). This SDP message (not shown in the
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 13]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- example) is carried by the SIP message in a way that is analogous to
- a document attachment being carried by an email message, or a web
- page being carried in an HTTP message.
-
- Since the softphone does not know the location of Bob or the SIP
- server in the biloxi.com domain, the softphone sends the INVITE to
- the SIP server that serves Alice's domain, atlanta.com. The address
- of the atlanta.com SIP server could have been configured in Alice's
- softphone, or it could have been discovered by DHCP, for example.
-
- The atlanta.com SIP server is a type of SIP server known as a proxy
- server. A proxy server receives SIP requests and forwards them on
- behalf of the requestor. In this example, the proxy server receives
- the INVITE request and sends a 100 (Trying) response back to Alice's
- softphone. The 100 (Trying) response indicates that the INVITE has
- been received and that the proxy is working on her behalf to route
- the INVITE to the destination. Responses in SIP use a three-digit
- code followed by a descriptive phrase. This response contains the
- same To, From, Call-ID, CSeq and branch parameter in the Via as the
- INVITE, which allows Alice's softphone to correlate this response to
- the sent INVITE. The atlanta.com proxy server locates the proxy
- server at biloxi.com, possibly by performing a particular type of DNS
- (Domain Name Service) lookup to find the SIP server that serves the
- biloxi.com domain. This is described in [4]. As a result, it
- obtains the IP address of the biloxi.com proxy server and forwards,
- or proxies, the INVITE request there. Before forwarding the request,
- the atlanta.com proxy server adds an additional Via header field
- value that contains its own address (the INVITE already contains
- Alice's address in the first Via). The biloxi.com proxy server
- receives the INVITE and responds with a 100 (Trying) response back to
- the atlanta.com proxy server to indicate that it has received the
- INVITE and is processing the request. The proxy server consults a
- database, generically called a location service, that contains the
- current IP address of Bob. (We shall see in the next section how
- this database can be populated.) The biloxi.com proxy server adds
- another Via header field value with its own address to the INVITE and
- proxies it to Bob's SIP phone.
-
- Bob's SIP phone receives the INVITE and alerts Bob to the incoming
- call from Alice so that Bob can decide whether to answer the call,
- that is, Bob's phone rings. Bob's SIP phone indicates this in a 180
- (Ringing) response, which is routed back through the two proxies in
- the reverse direction. Each proxy uses the Via header field to
- determine where to send the response and removes its own address from
- the top. As a result, although DNS and location service lookups were
- required to route the initial INVITE, the 180 (Ringing) response can
- be returned to the caller without lookups or without state being
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 14]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- maintained in the proxies. This also has the desirable property that
- each proxy that sees the INVITE will also see all responses to the
- INVITE.
-
- When Alice's softphone receives the 180 (Ringing) response, it passes
- this information to Alice, perhaps using an audio ringback tone or by
- displaying a message on Alice's screen.
-
- In this example, Bob decides to answer the call. When he picks up
- the handset, his SIP phone sends a 200 (OK) response to indicate that
- the call has been answered. The 200 (OK) contains a message body
- with the SDP media description of the type of session that Bob is
- willing to establish with Alice. As a result, there is a two-phase
- exchange of SDP messages: Alice sent one to Bob, and Bob sent one
- back to Alice. This two-phase exchange provides basic negotiation
- capabilities and is based on a simple offer/answer model of SDP
- exchange. If Bob did not wish to answer the call or was busy on
- another call, an error response would have been sent instead of the
- 200 (OK), which would have resulted in no media session being
- established. The complete list of SIP response codes is in Section
- 21. The 200 (OK) (message F9 in Figure 1) might look like this as
- Bob sends it out:
-
- SIP/2.0 200 OK
- Via: SIP/2.0/UDP server10.biloxi.com
- ;branch=z9hG4bKnashds8;received=192.0.2.3
- Via: SIP/2.0/UDP bigbox3.site3.atlanta.com
- ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2
- Via: SIP/2.0/UDP pc33.atlanta.com
- ;branch=z9hG4bK776asdhds ;received=192.0.2.1
- To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
- From: Alice <sip:alice@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710@pc33.atlanta.com
- CSeq: 314159 INVITE
- Contact: <sip:bob@192.0.2.4>
- Content-Type: application/sdp
- Content-Length: 131
-
- (Bob's SDP not shown)
-
- The first line of the response contains the response code (200) and
- the reason phrase (OK). The remaining lines contain header fields.
- The Via, To, From, Call-ID, and CSeq header fields are copied from
- the INVITE request. (There are three Via header field values - one
- added by Alice's SIP phone, one added by the atlanta.com proxy, and
- one added by the biloxi.com proxy.) Bob's SIP phone has added a tag
- parameter to the To header field. This tag will be incorporated by
- both endpoints into the dialog and will be included in all future
-
-
-
-Rosenberg, et. al. Standards Track [Page 15]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- requests and responses in this call. The Contact header field
- contains a URI at which Bob can be directly reached at his SIP phone.
- The Content-Type and Content-Length refer to the message body (not
- shown) that contains Bob's SDP media information.
-
- In addition to DNS and location service lookups shown in this
- example, proxy servers can make flexible "routing decisions" to
- decide where to send a request. For example, if Bob's SIP phone
- returned a 486 (Busy Here) response, the biloxi.com proxy server
- could proxy the INVITE to Bob's voicemail server. A proxy server can
- also send an INVITE to a number of locations at the same time. This
- type of parallel search is known as forking.
-
- In this case, the 200 (OK) is routed back through the two proxies and
- is received by Alice's softphone, which then stops the ringback tone
- and indicates that the call has been answered. Finally, Alice's
- softphone sends an acknowledgement message, ACK, to Bob's SIP phone
- to confirm the reception of the final response (200 (OK)). In this
- example, the ACK is sent directly from Alice's softphone to Bob's SIP
- phone, bypassing the two proxies. This occurs because the endpoints
- have learned each other's address from the Contact header fields
- through the INVITE/200 (OK) exchange, which was not known when the
- initial INVITE was sent. The lookups performed by the two proxies
- are no longer needed, so the proxies drop out of the call flow. This
- completes the INVITE/200/ACK three-way handshake used to establish
- SIP sessions. Full details on session setup are in Section 13.
-
- Alice and Bob's media session has now begun, and they send media
- packets using the format to which they agreed in the exchange of SDP.
- In general, the end-to-end media packets take a different path from
- the SIP signaling messages.
-
- During the session, either Alice or Bob may decide to change the
- characteristics of the media session. This is accomplished by
- sending a re-INVITE containing a new media description. This re-
- INVITE references the existing dialog so that the other party knows
- that it is to modify an existing session instead of establishing a
- new session. The other party sends a 200 (OK) to accept the change.
- The requestor responds to the 200 (OK) with an ACK. If the other
- party does not accept the change, he sends an error response such as
- 488 (Not Acceptable Here), which also receives an ACK. However, the
- failure of the re-INVITE does not cause the existing call to fail -
- the session continues using the previously negotiated
- characteristics. Full details on session modification are in Section
- 14.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 16]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- At the end of the call, Bob disconnects (hangs up) first and
- generates a BYE message. This BYE is routed directly to Alice's
- softphone, again bypassing the proxies. Alice confirms receipt of
- the BYE with a 200 (OK) response, which terminates the session and
- the BYE transaction. No ACK is sent - an ACK is only sent in
- response to a response to an INVITE request. The reasons for this
- special handling for INVITE will be discussed later, but relate to
- the reliability mechanisms in SIP, the length of time it can take for
- a ringing phone to be answered, and forking. For this reason,
- request handling in SIP is often classified as either INVITE or non-
- INVITE, referring to all other methods besides INVITE. Full details
- on session termination are in Section 15.
-
- Section 24.2 describes the messages shown in Figure 1 in full.
-
- In some cases, it may be useful for proxies in the SIP signaling path
- to see all the messaging between the endpoints for the duration of
- the session. For example, if the biloxi.com proxy server wished to
- remain in the SIP messaging path beyond the initial INVITE, it would
- add to the INVITE a required routing header field known as Record-
- Route that contained a URI resolving to the hostname or IP address of
- the proxy. This information would be received by both Bob's SIP
- phone and (due to the Record-Route header field being passed back in
- the 200 (OK)) Alice's softphone and stored for the duration of the
- dialog. The biloxi.com proxy server would then receive and proxy the
- ACK, BYE, and 200 (OK) to the BYE. Each proxy can independently
- decide to receive subsequent messages, and those messages will pass
- through all proxies that elect to receive it. This capability is
- frequently used for proxies that are providing mid-call features.
-
- Registration is another common operation in SIP. Registration is one
- way that the biloxi.com server can learn the current location of Bob.
- Upon initialization, and at periodic intervals, Bob's SIP phone sends
- REGISTER messages to a server in the biloxi.com domain known as a SIP
- registrar. The REGISTER messages associate Bob's SIP or SIPS URI
- (sip:bob@biloxi.com) with the machine into which he is currently
- logged (conveyed as a SIP or SIPS URI in the Contact header field).
- The registrar writes this association, also called a binding, to a
- database, called the location service, where it can be used by the
- proxy in the biloxi.com domain. Often, a registrar server for a
- domain is co-located with the proxy for that domain. It is an
- important concept that the distinction between types of SIP servers
- is logical, not physical.
-
- Bob is not limited to registering from a single device. For example,
- both his SIP phone at home and the one in the office could send
- registrations. This information is stored together in the location
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 17]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- service and allows a proxy to perform various types of searches to
- locate Bob. Similarly, more than one user can be registered on a
- single device at the same time.
-
- The location service is just an abstract concept. It generally
- contains information that allows a proxy to input a URI and receive a
- set of zero or more URIs that tell the proxy where to send the
- request. Registrations are one way to create this information, but
- not the only way. Arbitrary mapping functions can be configured at
- the discretion of the administrator.
-
- Finally, it is important to note that in SIP, registration is used
- for routing incoming SIP requests and has no role in authorizing
- outgoing requests. Authorization and authentication are handled in
- SIP either on a request-by-request basis with a challenge/response
- mechanism, or by using a lower layer scheme as discussed in Section
- 26.
-
- The complete set of SIP message details for this registration example
- is in Section 24.1.
-
- Additional operations in SIP, such as querying for the capabilities
- of a SIP server or client using OPTIONS, or canceling a pending
- request using CANCEL, will be introduced in later sections.
-
-5 Structure of the Protocol
-
- SIP is structured as a layered protocol, which means that its
- behavior is described in terms of a set of fairly independent
- processing stages with only a loose coupling between each stage. The
- protocol behavior is described as layers for the purpose of
- presentation, allowing the description of functions common across
- elements in a single section. It does not dictate an implementation
- in any way. When we say that an element "contains" a layer, we mean
- it is compliant to the set of rules defined by that layer.
-
- Not every element specified by the protocol contains every layer.
- Furthermore, the elements specified by SIP are logical elements, not
- physical ones. A physical realization can choose to act as different
- logical elements, perhaps even on a transaction-by-transaction basis.
-
- The lowest layer of SIP is its syntax and encoding. Its encoding is
- specified using an augmented Backus-Naur Form grammar (BNF). The
- complete BNF is specified in Section 25; an overview of a SIP
- message's structure can be found in Section 7.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 18]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The second layer is the transport layer. It defines how a client
- sends requests and receives responses and how a server receives
- requests and sends responses over the network. All SIP elements
- contain a transport layer. The transport layer is described in
- Section 18.
-
- The third layer is the transaction layer. Transactions are a
- fundamental component of SIP. A transaction is a request sent by a
- client transaction (using the transport layer) to a server
- transaction, along with all responses to that request sent from the
- server transaction back to the client. The transaction layer handles
- application-layer retransmissions, matching of responses to requests,
- and application-layer timeouts. Any task that a user agent client
- (UAC) accomplishes takes place using a series of transactions.
- Discussion of transactions can be found in Section 17. User agents
- contain a transaction layer, as do stateful proxies. Stateless
- proxies do not contain a transaction layer. The transaction layer
- has a client component (referred to as a client transaction) and a
- server component (referred to as a server transaction), each of which
- are represented by a finite state machine that is constructed to
- process a particular request.
-
- The layer above the transaction layer is called the transaction user
- (TU). Each of the SIP entities, except the stateless proxy, is a
- transaction user. When a TU wishes to send a request, it creates a
- client transaction instance and passes it the request along with the
- destination IP address, port, and transport to which to send the
- request. A TU that creates a client transaction can also cancel it.
- When a client cancels a transaction, it requests that the server stop
- further processing, revert to the state that existed before the
- transaction was initiated, and generate a specific error response to
- that transaction. This is done with a CANCEL request, which
- constitutes its own transaction, but references the transaction to be
- cancelled (Section 9).
-
- The SIP elements, that is, user agent clients and servers, stateless
- and stateful proxies and registrars, contain a core that
- distinguishes them from each other. Cores, except for the stateless
- proxy, are transaction users. While the behavior of the UAC and UAS
- cores depends on the method, there are some common rules for all
- methods (Section 8). For a UAC, these rules govern the construction
- of a request; for a UAS, they govern the processing of a request and
- generating a response. Since registrations play an important role in
- SIP, a UAS that handles a REGISTER is given the special name
- registrar. Section 10 describes UAC and UAS core behavior for the
- REGISTER method. Section 11 describes UAC and UAS core behavior for
- the OPTIONS method, used for determining the capabilities of a UA.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 19]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Certain other requests are sent within a dialog. A dialog is a
- peer-to-peer SIP relationship between two user agents that persists
- for some time. The dialog facilitates sequencing of messages and
- proper routing of requests between the user agents. The INVITE
- method is the only way defined in this specification to establish a
- dialog. When a UAC sends a request that is within the context of a
- dialog, it follows the common UAC rules as discussed in Section 8 but
- also the rules for mid-dialog requests. Section 12 discusses dialogs
- and presents the procedures for their construction and maintenance,
- in addition to construction of requests within a dialog.
-
- The most important method in SIP is the INVITE method, which is used
- to establish a session between participants. A session is a
- collection of participants, and streams of media between them, for
- the purposes of communication. Section 13 discusses how sessions are
- initiated, resulting in one or more SIP dialogs. Section 14
- discusses how characteristics of that session are modified through
- the use of an INVITE request within a dialog. Finally, section 15
- discusses how a session is terminated.
-
- The procedures of Sections 8, 10, 11, 12, 13, 14, and 15 deal
- entirely with the UA core (Section 9 describes cancellation, which
- applies to both UA core and proxy core). Section 16 discusses the
- proxy element, which facilitates routing of messages between user
- agents.
-
-6 Definitions
-
- The following terms have special significance for SIP.
-
- Address-of-Record: An address-of-record (AOR) is a SIP or SIPS URI
- that points to a domain with a location service that can map
- the URI to another URI where the user might be available.
- Typically, the location service is populated through
- registrations. An AOR is frequently thought of as the "public
- address" of the user.
-
- Back-to-Back User Agent: A back-to-back user agent (B2BUA) is a
- logical entity that receives a request and processes it as a
- user agent server (UAS). In order to determine how the request
- should be answered, it acts as a user agent client (UAC) and
- generates requests. Unlike a proxy server, it maintains dialog
- state and must participate in all requests sent on the dialogs
- it has established. Since it is a concatenation of a UAC and
- UAS, no explicit definitions are needed for its behavior.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 20]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Call: A call is an informal term that refers to some communication
- between peers, generally set up for the purposes of a
- multimedia conversation.
-
- Call Leg: Another name for a dialog [31]; no longer used in this
- specification.
-
- Call Stateful: A proxy is call stateful if it retains state for a
- dialog from the initiating INVITE to the terminating BYE
- request. A call stateful proxy is always transaction stateful,
- but the converse is not necessarily true.
-
- Client: A client is any network element that sends SIP requests
- and receives SIP responses. Clients may or may not interact
- directly with a human user. User agent clients and proxies are
- clients.
-
- Conference: A multimedia session (see below) that contains
- multiple participants.
-
- Core: Core designates the functions specific to a particular type
- of SIP entity, i.e., specific to either a stateful or stateless
- proxy, a user agent or registrar. All cores, except those for
- the stateless proxy, are transaction users.
-
- Dialog: A dialog is a peer-to-peer SIP relationship between two
- UAs that persists for some time. A dialog is established by
- SIP messages, such as a 2xx response to an INVITE request. A
- dialog is identified by a call identifier, local tag, and a
- remote tag. A dialog was formerly known as a call leg in RFC
- 2543.
-
- Downstream: A direction of message forwarding within a transaction
- that refers to the direction that requests flow from the user
- agent client to user agent server.
-
- Final Response: A response that terminates a SIP transaction, as
- opposed to a provisional response that does not. All 2xx, 3xx,
- 4xx, 5xx and 6xx responses are final.
-
- Header: A header is a component of a SIP message that conveys
- information about the message. It is structured as a sequence
- of header fields.
-
- Header Field: A header field is a component of the SIP message
- header. A header field can appear as one or more header field
- rows. Header field rows consist of a header field name and zero
- or more header field values. Multiple header field values on a
-
-
-
-Rosenberg, et. al. Standards Track [Page 21]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- given header field row are separated by commas. Some header
- fields can only have a single header field value, and as a
- result, always appear as a single header field row.
-
- Header Field Value: A header field value is a single value; a
- header field consists of zero or more header field values.
-
- Home Domain: The domain providing service to a SIP user.
- Typically, this is the domain present in the URI in the
- address-of-record of a registration.
-
- Informational Response: Same as a provisional response.
-
- Initiator, Calling Party, Caller: The party initiating a session
- (and dialog) with an INVITE request. A caller retains this
- role from the time it sends the initial INVITE that established
- a dialog until the termination of that dialog.
-
- Invitation: An INVITE request.
-
- Invitee, Invited User, Called Party, Callee: The party that
- receives an INVITE request for the purpose of establishing a
- new session. A callee retains this role from the time it
- receives the INVITE until the termination of the dialog
- established by that INVITE.
-
- Location Service: A location service is used by a SIP redirect or
- proxy server to obtain information about a callee's possible
- location(s). It contains a list of bindings of address-of-
- record keys to zero or more contact addresses. The bindings
- can be created and removed in many ways; this specification
- defines a REGISTER method that updates the bindings.
-
- Loop: A request that arrives at a proxy, is forwarded, and later
- arrives back at the same proxy. When it arrives the second
- time, its Request-URI is identical to the first time, and other
- header fields that affect proxy operation are unchanged, so
- that the proxy would make the same processing decision on the
- request it made the first time. Looped requests are errors,
- and the procedures for detecting them and handling them are
- described by the protocol.
-
- Loose Routing: A proxy is said to be loose routing if it follows
- the procedures defined in this specification for processing of
- the Route header field. These procedures separate the
- destination of the request (present in the Request-URI) from
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 22]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- the set of proxies that need to be visited along the way
- (present in the Route header field). A proxy compliant to
- these mechanisms is also known as a loose router.
-
- Message: Data sent between SIP elements as part of the protocol.
- SIP messages are either requests or responses.
-
- Method: The method is the primary function that a request is meant
- to invoke on a server. The method is carried in the request
- message itself. Example methods are INVITE and BYE.
-
- Outbound Proxy: A proxy that receives requests from a client, even
- though it may not be the server resolved by the Request-URI.
- Typically, a UA is manually configured with an outbound proxy,
- or can learn about one through auto-configuration protocols.
-
- Parallel Search: In a parallel search, a proxy issues several
- requests to possible user locations upon receiving an incoming
- request. Rather than issuing one request and then waiting for
- the final response before issuing the next request as in a
- sequential search, a parallel search issues requests without
- waiting for the result of previous requests.
-
- Provisional Response: A response used by the server to indicate
- progress, but that does not terminate a SIP transaction. 1xx
- responses are provisional, other responses are considered
- final.
-
- Proxy, Proxy Server: An intermediary entity that acts as both a
- server and a client for the purpose of making requests on
- behalf of other clients. A proxy server primarily plays the
- role of routing, which means its job is to ensure that a
- request is sent to another entity "closer" to the targeted
- user. Proxies are also useful for enforcing policy (for
- example, making sure a user is allowed to make a call). A
- proxy interprets, and, if necessary, rewrites specific parts of
- a request message before forwarding it.
-
- Recursion: A client recurses on a 3xx response when it generates a
- new request to one or more of the URIs in the Contact header
- field in the response.
-
- Redirect Server: A redirect server is a user agent server that
- generates 3xx responses to requests it receives, directing the
- client to contact an alternate set of URIs.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 23]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Registrar: A registrar is a server that accepts REGISTER requests
- and places the information it receives in those requests into
- the location service for the domain it handles.
-
- Regular Transaction: A regular transaction is any transaction with
- a method other than INVITE, ACK, or CANCEL.
-
- Request: A SIP message sent from a client to a server, for the
- purpose of invoking a particular operation.
-
- Response: A SIP message sent from a server to a client, for
- indicating the status of a request sent from the client to the
- server.
-
- Ringback: Ringback is the signaling tone produced by the calling
- party's application indicating that a called party is being
- alerted (ringing).
-
- Route Set: A route set is a collection of ordered SIP or SIPS URI
- which represent a list of proxies that must be traversed when
- sending a particular request. A route set can be learned,
- through headers like Record-Route, or it can be configured.
-
- Server: A server is a network element that receives requests in
- order to service them and sends back responses to those
- requests. Examples of servers are proxies, user agent servers,
- redirect servers, and registrars.
-
- Sequential Search: In a sequential search, a proxy server attempts
- each contact address in sequence, proceeding to the next one
- only after the previous has generated a final response. A 2xx
- or 6xx class final response always terminates a sequential
- search.
-
- Session: From the SDP specification: "A multimedia session is a
- set of multimedia senders and receivers and the data streams
- flowing from senders to receivers. A multimedia conference is
- an example of a multimedia session." (RFC 2327 [1]) (A session
- as defined for SDP can comprise one or more RTP sessions.) As
- defined, a callee can be invited several times, by different
- calls, to the same session. If SDP is used, a session is
- defined by the concatenation of the SDP user name, session id,
- network type, address type, and address elements in the origin
- field.
-
- SIP Transaction: A SIP transaction occurs between a client and a
- server and comprises all messages from the first request sent
- from the client to the server up to a final (non-1xx) response
-
-
-
-Rosenberg, et. al. Standards Track [Page 24]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- sent from the server to the client. If the request is INVITE
- and the final response is a non-2xx, the transaction also
- includes an ACK to the response. The ACK for a 2xx response to
- an INVITE request is a separate transaction.
-
- Spiral: A spiral is a SIP request that is routed to a proxy,
- forwarded onwards, and arrives once again at that proxy, but
- this time differs in a way that will result in a different
- processing decision than the original request. Typically, this
- means that the request's Request-URI differs from its previous
- arrival. A spiral is not an error condition, unlike a loop. A
- typical cause for this is call forwarding. A user calls
- joe@example.com. The example.com proxy forwards it to Joe's
- PC, which in turn, forwards it to bob@example.com. This
- request is proxied back to the example.com proxy. However,
- this is not a loop. Since the request is targeted at a
- different user, it is considered a spiral, and is a valid
- condition.
-
- Stateful Proxy: A logical entity that maintains the client and
- server transaction state machines defined by this specification
- during the processing of a request, also known as a transaction
- stateful proxy. The behavior of a stateful proxy is further
- defined in Section 16. A (transaction) stateful proxy is not
- the same as a call stateful proxy.
-
- Stateless Proxy: A logical entity that does not maintain the
- client or server transaction state machines defined in this
- specification when it processes requests. A stateless proxy
- forwards every request it receives downstream and every
- response it receives upstream.
-
- Strict Routing: A proxy is said to be strict routing if it follows
- the Route processing rules of RFC 2543 and many prior work in
- progress versions of this RFC. That rule caused proxies to
- destroy the contents of the Request-URI when a Route header
- field was present. Strict routing behavior is not used in this
- specification, in favor of a loose routing behavior. Proxies
- that perform strict routing are also known as strict routers.
-
- Target Refresh Request: A target refresh request sent within a
- dialog is defined as a request that can modify the remote
- target of the dialog.
-
- Transaction User (TU): The layer of protocol processing that
- resides above the transaction layer. Transaction users include
- the UAC core, UAS core, and proxy core.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 25]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Upstream: A direction of message forwarding within a transaction
- that refers to the direction that responses flow from the user
- agent server back to the user agent client.
-
- URL-encoded: A character string encoded according to RFC 2396,
- Section 2.4 [5].
-
- User Agent Client (UAC): A user agent client is a logical entity
- that creates a new request, and then uses the client
- transaction state machinery to send it. The role of UAC lasts
- only for the duration of that transaction. In other words, if
- a piece of software initiates a request, it acts as a UAC for
- the duration of that transaction. If it receives a request
- later, it assumes the role of a user agent server for the
- processing of that transaction.
-
- UAC Core: The set of processing functions required of a UAC that
- reside above the transaction and transport layers.
-
- User Agent Server (UAS): A user agent server is a logical entity
- that generates a response to a SIP request. The response
- accepts, rejects, or redirects the request. This role lasts
- only for the duration of that transaction. In other words, if
- a piece of software responds to a request, it acts as a UAS for
- the duration of that transaction. If it generates a request
- later, it assumes the role of a user agent client for the
- processing of that transaction.
-
- UAS Core: The set of processing functions required at a UAS that
- resides above the transaction and transport layers.
-
- User Agent (UA): A logical entity that can act as both a user
- agent client and user agent server.
-
- The role of UAC and UAS, as well as proxy and redirect servers, are
- defined on a transaction-by-transaction basis. For example, the user
- agent initiating a call acts as a UAC when sending the initial INVITE
- request and as a UAS when receiving a BYE request from the callee.
- Similarly, the same software can act as a proxy server for one
- request and as a redirect server for the next request.
-
- Proxy, location, and registrar servers defined above are logical
- entities; implementations MAY combine them into a single application.
-
-7 SIP Messages
-
- SIP is a text-based protocol and uses the UTF-8 charset (RFC 2279
- [7]).
-
-
-
-Rosenberg, et. al. Standards Track [Page 26]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- A SIP message is either a request from a client to a server, or a
- response from a server to a client.
-
- Both Request (section 7.1) and Response (section 7.2) messages use
- the basic format of RFC 2822 [3], even though the syntax differs in
- character set and syntax specifics. (SIP allows header fields that
- would not be valid RFC 2822 header fields, for example.) Both types
- of messages consist of a start-line, one or more header fields, an
- empty line indicating the end of the header fields, and an optional
- message-body.
-
- generic-message = start-line
- *message-header
- CRLF
- [ message-body ]
- start-line = Request-Line / Status-Line
-
- The start-line, each message-header line, and the empty line MUST be
- terminated by a carriage-return line-feed sequence (CRLF). Note that
- the empty line MUST be present even if the message-body is not.
-
- Except for the above difference in character sets, much of SIP's
- message and header field syntax is identical to HTTP/1.1. Rather
- than repeating the syntax and semantics here, we use [HX.Y] to refer
- to Section X.Y of the current HTTP/1.1 specification (RFC 2616 [8]).
-
- However, SIP is not an extension of HTTP.
-
-7.1 Requests
-
- SIP requests are distinguished by having a Request-Line for a start-
- line. A Request-Line contains a method name, a Request-URI, and the
- protocol version separated by a single space (SP) character.
-
- The Request-Line ends with CRLF. No CR or LF are allowed except in
- the end-of-line CRLF sequence. No linear whitespace (LWS) is allowed
- in any of the elements.
-
- Request-Line = Method SP Request-URI SP SIP-Version CRLF
-
- Method: This specification defines six methods: REGISTER for
- registering contact information, INVITE, ACK, and CANCEL for
- setting up sessions, BYE for terminating sessions, and
- OPTIONS for querying servers about their capabilities. SIP
- extensions, documented in standards track RFCs, may define
- additional methods.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 27]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Request-URI: The Request-URI is a SIP or SIPS URI as described in
- Section 19.1 or a general URI (RFC 2396 [5]). It indicates
- the user or service to which this request is being addressed.
- The Request-URI MUST NOT contain unescaped spaces or control
- characters and MUST NOT be enclosed in "<>".
-
- SIP elements MAY support Request-URIs with schemes other than
- "sip" and "sips", for example the "tel" URI scheme of RFC
- 2806 [9]. SIP elements MAY translate non-SIP URIs using any
- mechanism at their disposal, resulting in SIP URI, SIPS URI,
- or some other scheme.
-
- SIP-Version: Both request and response messages include the
- version of SIP in use, and follow [H3.1] (with HTTP replaced
- by SIP, and HTTP/1.1 replaced by SIP/2.0) regarding version
- ordering, compliance requirements, and upgrading of version
- numbers. To be compliant with this specification,
- applications sending SIP messages MUST include a SIP-Version
- of "SIP/2.0". The SIP-Version string is case-insensitive,
- but implementations MUST send upper-case.
-
- Unlike HTTP/1.1, SIP treats the version number as a literal
- string. In practice, this should make no difference.
-
-7.2 Responses
-
- SIP responses are distinguished from requests by having a Status-Line
- as their start-line. A Status-Line consists of the protocol version
- followed by a numeric Status-Code and its associated textual phrase,
- with each element separated by a single SP character.
-
- No CR or LF is allowed except in the final CRLF sequence.
-
- Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
-
- The Status-Code is a 3-digit integer result code that indicates the
- outcome of an attempt to understand and satisfy a request. The
- Reason-Phrase is intended to give a short textual description of the
- Status-Code. The Status-Code is intended for use by automata,
- whereas the Reason-Phrase is intended for the human user. A client
- is not required to examine or display the Reason-Phrase.
-
- While this specification suggests specific wording for the reason
- phrase, implementations MAY choose other text, for example, in the
- language indicated in the Accept-Language header field of the
- request.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 28]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The first digit of the Status-Code defines the class of response.
- The last two digits do not have any categorization role. For this
- reason, any response with a status code between 100 and 199 is
- referred to as a "1xx response", any response with a status code
- between 200 and 299 as a "2xx response", and so on. SIP/2.0 allows
- six values for the first digit:
-
- 1xx: Provisional -- request received, continuing to process the
- request;
-
- 2xx: Success -- the action was successfully received, understood,
- and accepted;
-
- 3xx: Redirection -- further action needs to be taken in order to
- complete the request;
-
- 4xx: Client Error -- the request contains bad syntax or cannot be
- fulfilled at this server;
-
- 5xx: Server Error -- the server failed to fulfill an apparently
- valid request;
-
- 6xx: Global Failure -- the request cannot be fulfilled at any
- server.
-
- Section 21 defines these classes and describes the individual codes.
-
-7.3 Header Fields
-
- SIP header fields are similar to HTTP header fields in both syntax
- and semantics. In particular, SIP header fields follow the [H4.2]
- definitions of syntax for the message-header and the rules for
- extending header fields over multiple lines. However, the latter is
- specified in HTTP with implicit whitespace and folding. This
- specification conforms to RFC 2234 [10] and uses only explicit
- whitespace and folding as an integral part of the grammar.
-
- [H4.2] also specifies that multiple header fields of the same field
- name whose value is a comma-separated list can be combined into one
- header field. That applies to SIP as well, but the specific rule is
- different because of the different grammars. Specifically, any SIP
- header whose grammar is of the form
-
- header = "header-name" HCOLON header-value *(COMMA header-value)
-
- allows for combining header fields of the same name into a comma-
- separated list. The Contact header field allows a comma-separated
- list unless the header field value is "*".
-
-
-
-Rosenberg, et. al. Standards Track [Page 29]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-7.3.1 Header Field Format
-
- Header fields follow the same generic header format as that given in
- Section 2.2 of RFC 2822 [3]. Each header field consists of a field
- name followed by a colon (":") and the field value.
-
- field-name: field-value
-
- The formal grammar for a message-header specified in Section 25
- allows for an arbitrary amount of whitespace on either side of the
- colon; however, implementations should avoid spaces between the field
- name and the colon and use a single space (SP) between the colon and
- the field-value.
-
- Subject: lunch
- Subject : lunch
- Subject :lunch
- Subject: lunch
-
- Thus, the above are all valid and equivalent, but the last is the
- preferred form.
-
- Header fields can be extended over multiple lines by preceding each
- extra line with at least one SP or horizontal tab (HT). The line
- break and the whitespace at the beginning of the next line are
- treated as a single SP character. Thus, the following are
- equivalent:
-
- Subject: I know you're there, pick up the phone and talk to me!
- Subject: I know you're there,
- pick up the phone
- and talk to me!
-
- The relative order of header fields with different field names is not
- significant. However, it is RECOMMENDED that header fields which are
- needed for proxy processing (Via, Route, Record-Route, Proxy-Require,
- Max-Forwards, and Proxy-Authorization, for example) appear towards
- the top of the message to facilitate rapid parsing. The relative
- order of header field rows with the same field name is important.
- Multiple header field rows with the same field-name MAY be present in
- a message if and only if the entire field-value for that header field
- is defined as a comma-separated list (that is, if follows the grammar
- defined in Section 7.3). It MUST be possible to combine the multiple
- header field rows into one "field-name: field-value" pair, without
- changing the semantics of the message, by appending each subsequent
- field-value to the first, each separated by a comma. The exceptions
- to this rule are the WWW-Authenticate, Authorization, Proxy-
- Authenticate, and Proxy-Authorization header fields. Multiple header
-
-
-
-Rosenberg, et. al. Standards Track [Page 30]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- field rows with these names MAY be present in a message, but since
- their grammar does not follow the general form listed in Section 7.3,
- they MUST NOT be combined into a single header field row.
-
- Implementations MUST be able to process multiple header field rows
- with the same name in any combination of the single-value-per-line or
- comma-separated value forms.
-
- The following groups of header field rows are valid and equivalent:
-
- Route: <sip:alice@atlanta.com>
- Subject: Lunch
- Route: <sip:bob@biloxi.com>
- Route: <sip:carol@chicago.com>
-
- Route: <sip:alice@atlanta.com>, <sip:bob@biloxi.com>
- Route: <sip:carol@chicago.com>
- Subject: Lunch
-
- Subject: Lunch
- Route: <sip:alice@atlanta.com>, <sip:bob@biloxi.com>,
- <sip:carol@chicago.com>
-
- Each of the following blocks is valid but not equivalent to the
- others:
-
- Route: <sip:alice@atlanta.com>
- Route: <sip:bob@biloxi.com>
- Route: <sip:carol@chicago.com>
-
- Route: <sip:bob@biloxi.com>
- Route: <sip:alice@atlanta.com>
- Route: <sip:carol@chicago.com>
-
- Route: <sip:alice@atlanta.com>,<sip:carol@chicago.com>,
- <sip:bob@biloxi.com>
-
- The format of a header field-value is defined per header-name. It
- will always be either an opaque sequence of TEXT-UTF8 octets, or a
- combination of whitespace, tokens, separators, and quoted strings.
- Many existing header fields will adhere to the general form of a
- value followed by a semi-colon separated sequence of parameter-name,
- parameter-value pairs:
-
- field-name: field-value *(;parameter-name=parameter-value)
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 31]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Even though an arbitrary number of parameter pairs may be attached to
- a header field value, any given parameter-name MUST NOT appear more
- than once.
-
- When comparing header fields, field names are always case-
- insensitive. Unless otherwise stated in the definition of a
- particular header field, field values, parameter names, and parameter
- values are case-insensitive. Tokens are always case-insensitive.
- Unless specified otherwise, values expressed as quoted strings are
- case-sensitive. For example,
-
- Contact: <sip:alice@atlanta.com>;expires=3600
-
- is equivalent to
-
- CONTACT: <sip:alice@atlanta.com>;ExPiReS=3600
-
- and
-
- Content-Disposition: session;handling=optional
-
- is equivalent to
-
- content-disposition: Session;HANDLING=OPTIONAL
-
- The following two header fields are not equivalent:
-
- Warning: 370 devnull "Choose a bigger pipe"
- Warning: 370 devnull "CHOOSE A BIGGER PIPE"
-
-7.3.2 Header Field Classification
-
- Some header fields only make sense in requests or responses. These
- are called request header fields and response header fields,
- respectively. If a header field appears in a message not matching
- its category (such as a request header field in a response), it MUST
- be ignored. Section 20 defines the classification of each header
- field.
-
-7.3.3 Compact Form
-
- SIP provides a mechanism to represent common header field names in an
- abbreviated form. This may be useful when messages would otherwise
- become too large to be carried on the transport available to it
- (exceeding the maximum transmission unit (MTU) when using UDP, for
- example). These compact forms are defined in Section 20. A compact
- form MAY be substituted for the longer form of a header field name at
- any time without changing the semantics of the message. A header
-
-
-
-Rosenberg, et. al. Standards Track [Page 32]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- field name MAY appear in both long and short forms within the same
- message. Implementations MUST accept both the long and short forms
- of each header name.
-
-7.4 Bodies
-
- Requests, including new requests defined in extensions to this
- specification, MAY contain message bodies unless otherwise noted.
- The interpretation of the body depends on the request method.
-
- For response messages, the request method and the response status
- code determine the type and interpretation of any message body. All
- responses MAY include a body.
-
-7.4.1 Message Body Type
-
- The Internet media type of the message body MUST be given by the
- Content-Type header field. If the body has undergone any encoding
- such as compression, then this MUST be indicated by the Content-
- Encoding header field; otherwise, Content-Encoding MUST be omitted.
- If applicable, the character set of the message body is indicated as
- part of the Content-Type header-field value.
-
- The "multipart" MIME type defined in RFC 2046 [11] MAY be used within
- the body of the message. Implementations that send requests
- containing multipart message bodies MUST send a session description
- as a non-multipart message body if the remote implementation requests
- this through an Accept header field that does not contain multipart.
-
- SIP messages MAY contain binary bodies or body parts. When no
- explicit charset parameter is provided by the sender, media subtypes
- of the "text" type are defined to have a default charset value of
- "UTF-8".
-
-7.4.2 Message Body Length
-
- The body length in bytes is provided by the Content-Length header
- field. Section 20.14 describes the necessary contents of this header
- field in detail.
-
- The "chunked" transfer encoding of HTTP/1.1 MUST NOT be used for SIP.
- (Note: The chunked encoding modifies the body of a message in order
- to transfer it as a series of chunks, each with its own size
- indicator.)
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 33]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-7.5 Framing SIP Messages
-
- Unlike HTTP, SIP implementations can use UDP or other unreliable
- datagram protocols. Each such datagram carries one request or
- response. See Section 18 on constraints on usage of unreliable
- transports.
-
- Implementations processing SIP messages over stream-oriented
- transports MUST ignore any CRLF appearing before the start-line
- [H4.1].
-
- The Content-Length header field value is used to locate the end of
- each SIP message in a stream. It will always be present when SIP
- messages are sent over stream-oriented transports.
-
-8 General User Agent Behavior
-
- A user agent represents an end system. It contains a user agent
- client (UAC), which generates requests, and a user agent server
- (UAS), which responds to them. A UAC is capable of generating a
- request based on some external stimulus (the user clicking a button,
- or a signal on a PSTN line) and processing a response. A UAS is
- capable of receiving a request and generating a response based on
- user input, external stimulus, the result of a program execution, or
- some other mechanism.
-
- When a UAC sends a request, the request passes through some number of
- proxy servers, which forward the request towards the UAS. When the
- UAS generates a response, the response is forwarded towards the UAC.
-
- UAC and UAS procedures depend strongly on two factors. First, based
- on whether the request or response is inside or outside of a dialog,
- and second, based on the method of a request. Dialogs are discussed
- thoroughly in Section 12; they represent a peer-to-peer relationship
- between user agents and are established by specific SIP methods, such
- as INVITE.
-
- In this section, we discuss the method-independent rules for UAC and
- UAS behavior when processing requests that are outside of a dialog.
- This includes, of course, the requests which themselves establish a
- dialog.
-
- Security procedures for requests and responses outside of a dialog
- are described in Section 26. Specifically, mechanisms exist for the
- UAS and UAC to mutually authenticate. A limited set of privacy
- features are also supported through encryption of bodies using
- S/MIME.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 34]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-8.1 UAC Behavior
-
- This section covers UAC behavior outside of a dialog.
-
-8.1.1 Generating the Request
-
- A valid SIP request formulated by a UAC MUST, at a minimum, contain
- the following header fields: To, From, CSeq, Call-ID, Max-Forwards,
- and Via; all of these header fields are mandatory in all SIP
- requests. These six header fields are the fundamental building
- blocks of a SIP message, as they jointly provide for most of the
- critical message routing services including the addressing of
- messages, the routing of responses, limiting message propagation,
- ordering of messages, and the unique identification of transactions.
- These header fields are in addition to the mandatory request line,
- which contains the method, Request-URI, and SIP version.
-
- Examples of requests sent outside of a dialog include an INVITE to
- establish a session (Section 13) and an OPTIONS to query for
- capabilities (Section 11).
-
-8.1.1.1 Request-URI
-
- The initial Request-URI of the message SHOULD be set to the value of
- the URI in the To field. One notable exception is the REGISTER
- method; behavior for setting the Request-URI of REGISTER is given in
- Section 10. It may also be undesirable for privacy reasons or
- convenience to set these fields to the same value (especially if the
- originating UA expects that the Request-URI will be changed during
- transit).
-
- In some special circumstances, the presence of a pre-existing route
- set can affect the Request-URI of the message. A pre-existing route
- set is an ordered set of URIs that identify a chain of servers, to
- which a UAC will send outgoing requests that are outside of a dialog.
- Commonly, they are configured on the UA by a user or service provider
- manually, or through some other non-SIP mechanism. When a provider
- wishes to configure a UA with an outbound proxy, it is RECOMMENDED
- that this be done by providing it with a pre-existing route set with
- a single URI, that of the outbound proxy.
-
- When a pre-existing route set is present, the procedures for
- populating the Request-URI and Route header field detailed in Section
- 12.2.1.1 MUST be followed (even though there is no dialog), using the
- desired Request-URI as the remote target URI.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 35]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-8.1.1.2 To
-
- The To header field first and foremost specifies the desired
- "logical" recipient of the request, or the address-of-record of the
- user or resource that is the target of this request. This may or may
- not be the ultimate recipient of the request. The To header field
- MAY contain a SIP or SIPS URI, but it may also make use of other URI
- schemes (the tel URL (RFC 2806 [9]), for example) when appropriate.
- All SIP implementations MUST support the SIP URI scheme. Any
- implementation that supports TLS MUST support the SIPS URI scheme.
- The To header field allows for a display name.
-
- A UAC may learn how to populate the To header field for a particular
- request in a number of ways. Usually the user will suggest the To
- header field through a human interface, perhaps inputting the URI
- manually or selecting it from some sort of address book. Frequently,
- the user will not enter a complete URI, but rather a string of digits
- or letters (for example, "bob"). It is at the discretion of the UA
- to choose how to interpret this input. Using the string to form the
- user part of a SIP URI implies that the UA wishes the name to be
- resolved in the domain to the right-hand side (RHS) of the at-sign in
- the SIP URI (for instance, sip:bob@example.com). Using the string to
- form the user part of a SIPS URI implies that the UA wishes to
- communicate securely, and that the name is to be resolved in the
- domain to the RHS of the at-sign. The RHS will frequently be the
- home domain of the requestor, which allows for the home domain to
- process the outgoing request. This is useful for features like
- "speed dial" that require interpretation of the user part in the home
- domain. The tel URL may be used when the UA does not wish to specify
- the domain that should interpret a telephone number that has been
- input by the user. Rather, each domain through which the request
- passes would be given that opportunity. As an example, a user in an
- airport might log in and send requests through an outbound proxy in
- the airport. If they enter "411" (this is the phone number for local
- directory assistance in the United States), that needs to be
- interpreted and processed by the outbound proxy in the airport, not
- the user's home domain. In this case, tel:411 would be the right
- choice.
-
- A request outside of a dialog MUST NOT contain a To tag; the tag in
- the To field of a request identifies the peer of the dialog. Since
- no dialog is established, no tag is present.
-
- For further information on the To header field, see Section 20.39.
- The following is an example of a valid To header field:
-
- To: Carol <sip:carol@chicago.com>
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 36]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-8.1.1.3 From
-
- The From header field indicates the logical identity of the initiator
- of the request, possibly the user's address-of-record. Like the To
- header field, it contains a URI and optionally a display name. It is
- used by SIP elements to determine which processing rules to apply to
- a request (for example, automatic call rejection). As such, it is
- very important that the From URI not contain IP addresses or the FQDN
- of the host on which the UA is running, since these are not logical
- names.
-
- The From header field allows for a display name. A UAC SHOULD use
- the display name "Anonymous", along with a syntactically correct, but
- otherwise meaningless URI (like sip:thisis@anonymous.invalid), if the
- identity of the client is to remain hidden.
-
- Usually, the value that populates the From header field in requests
- generated by a particular UA is pre-provisioned by the user or by the
- administrators of the user's local domain. If a particular UA is
- used by multiple users, it might have switchable profiles that
- include a URI corresponding to the identity of the profiled user.
- Recipients of requests can authenticate the originator of a request
- in order to ascertain that they are who their From header field
- claims they are (see Section 22 for more on authentication).
-
- The From field MUST contain a new "tag" parameter, chosen by the UAC.
- See Section 19.3 for details on choosing a tag.
-
- For further information on the From header field, see Section 20.20.
- Examples:
-
- From: "Bob" <sips:bob@biloxi.com> ;tag=a48s
- From: sip:+12125551212@phone2net.com;tag=887s
- From: Anonymous <sip:c8oqz84zk7z@privacy.org>;tag=hyh8
-
-8.1.1.4 Call-ID
-
- The Call-ID header field acts as a unique identifier to group
- together a series of messages. It MUST be the same for all requests
- and responses sent by either UA in a dialog. It SHOULD be the same
- in each registration from a UA.
-
- In a new request created by a UAC outside of any dialog, the Call-ID
- header field MUST be selected by the UAC as a globally unique
- identifier over space and time unless overridden by method-specific
- behavior. All SIP UAs must have a means to guarantee that the Call-
- ID header fields they produce will not be inadvertently generated by
- any other UA. Note that when requests are retried after certain
-
-
-
-Rosenberg, et. al. Standards Track [Page 37]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- failure responses that solicit an amendment to a request (for
- example, a challenge for authentication), these retried requests are
- not considered new requests, and therefore do not need new Call-ID
- header fields; see Section 8.1.3.5.
-
- Use of cryptographically random identifiers (RFC 1750 [12]) in the
- generation of Call-IDs is RECOMMENDED. Implementations MAY use the
- form "localid@host". Call-IDs are case-sensitive and are simply
- compared byte-by-byte.
-
- Using cryptographically random identifiers provides some
- protection against session hijacking and reduces the likelihood of
- unintentional Call-ID collisions.
-
- No provisioning or human interface is required for the selection of
- the Call-ID header field value for a request.
-
- For further information on the Call-ID header field, see Section
- 20.8.
-
- Example:
-
- Call-ID: f81d4fae-7dec-11d0-a765-00a0c91e6bf6@foo.bar.com
-
-8.1.1.5 CSeq
-
- The CSeq header field serves as a way to identify and order
- transactions. It consists of a sequence number and a method. The
- method MUST match that of the request. For non-REGISTER requests
- outside of a dialog, the sequence number value is arbitrary. The
- sequence number value MUST be expressible as a 32-bit unsigned
- integer and MUST be less than 2**31. As long as it follows the above
- guidelines, a client may use any mechanism it would like to select
- CSeq header field values.
-
- Section 12.2.1.1 discusses construction of the CSeq for requests
- within a dialog.
-
- Example:
-
- CSeq: 4711 INVITE
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 38]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-8.1.1.6 Max-Forwards
-
- The Max-Forwards header field serves to limit the number of hops a
- request can transit on the way to its destination. It consists of an
- integer that is decremented by one at each hop. If the Max-Forwards
- value reaches 0 before the request reaches its destination, it will
- be rejected with a 483(Too Many Hops) error response.
-
- A UAC MUST insert a Max-Forwards header field into each request it
- originates with a value that SHOULD be 70. This number was chosen to
- be sufficiently large to guarantee that a request would not be
- dropped in any SIP network when there were no loops, but not so large
- as to consume proxy resources when a loop does occur. Lower values
- should be used with caution and only in networks where topologies are
- known by the UA.
-
-8.1.1.7 Via
-
- The Via header field indicates the transport used for the transaction
- and identifies the location where the response is to be sent. A Via
- header field value is added only after the transport that will be
- used to reach the next hop has been selected (which may involve the
- usage of the procedures in [4]).
-
- When the UAC creates a request, it MUST insert a Via into that
- request. The protocol name and protocol version in the header field
- MUST be SIP and 2.0, respectively. The Via header field value MUST
- contain a branch parameter. This parameter is used to identify the
- transaction created by that request. This parameter is used by both
- the client and the server.
-
- The branch parameter value MUST be unique across space and time for
- all requests sent by the UA. The exceptions to this rule are CANCEL
- and ACK for non-2xx responses. As discussed below, a CANCEL request
- will have the same value of the branch parameter as the request it
- cancels. As discussed in Section 17.1.1.3, an ACK for a non-2xx
- response will also have the same branch ID as the INVITE whose
- response it acknowledges.
-
- The uniqueness property of the branch ID parameter, to facilitate
- its use as a transaction ID, was not part of RFC 2543.
-
- The branch ID inserted by an element compliant with this
- specification MUST always begin with the characters "z9hG4bK". These
- 7 characters are used as a magic cookie (7 is deemed sufficient to
- ensure that an older RFC 2543 implementation would not pick such a
- value), so that servers receiving the request can determine that the
- branch ID was constructed in the fashion described by this
-
-
-
-Rosenberg, et. al. Standards Track [Page 39]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- specification (that is, globally unique). Beyond this requirement,
- the precise format of the branch token is implementation-defined.
-
- The Via header maddr, ttl, and sent-by components will be set when
- the request is processed by the transport layer (Section 18).
-
- Via processing for proxies is described in Section 16.6 Item 8 and
- Section 16.7 Item 3.
-
-8.1.1.8 Contact
-
- The Contact header field provides a SIP or SIPS URI that can be used
- to contact that specific instance of the UA for subsequent requests.
- The Contact header field MUST be present and contain exactly one SIP
- or SIPS URI in any request that can result in the establishment of a
- dialog. For the methods defined in this specification, that includes
- only the INVITE request. For these requests, the scope of the
- Contact is global. That is, the Contact header field value contains
- the URI at which the UA would like to receive requests, and this URI
- MUST be valid even if used in subsequent requests outside of any
- dialogs.
-
- If the Request-URI or top Route header field value contains a SIPS
- URI, the Contact header field MUST contain a SIPS URI as well.
-
- For further information on the Contact header field, see Section
- 20.10.
-
-8.1.1.9 Supported and Require
-
- If the UAC supports extensions to SIP that can be applied by the
- server to the response, the UAC SHOULD include a Supported header
- field in the request listing the option tags (Section 19.2) for those
- extensions.
-
- The option tags listed MUST only refer to extensions defined in
- standards-track RFCs. This is to prevent servers from insisting that
- clients implement non-standard, vendor-defined features in order to
- receive service. Extensions defined by experimental and
- informational RFCs are explicitly excluded from usage with the
- Supported header field in a request, since they too are often used to
- document vendor-defined extensions.
-
- If the UAC wishes to insist that a UAS understand an extension that
- the UAC will apply to the request in order to process the request, it
- MUST insert a Require header field into the request listing the
- option tag for that extension. If the UAC wishes to apply an
- extension to the request and insist that any proxies that are
-
-
-
-Rosenberg, et. al. Standards Track [Page 40]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- traversed understand that extension, it MUST insert a Proxy-Require
- header field into the request listing the option tag for that
- extension.
-
- As with the Supported header field, the option tags in the Require
- and Proxy-Require header fields MUST only refer to extensions defined
- in standards-track RFCs.
-
-8.1.1.10 Additional Message Components
-
- After a new request has been created, and the header fields described
- above have been properly constructed, any additional optional header
- fields are added, as are any header fields specific to the method.
-
- SIP requests MAY contain a MIME-encoded message-body. Regardless of
- the type of body that a request contains, certain header fields must
- be formulated to characterize the contents of the body. For further
- information on these header fields, see Sections 20.11 through 20.15.
-
-8.1.2 Sending the Request
-
- The destination for the request is then computed. Unless there is
- local policy specifying otherwise, the destination MUST be determined
- by applying the DNS procedures described in [4] as follows. If the
- first element in the route set indicated a strict router (resulting
- in forming the request as described in Section 12.2.1.1), the
- procedures MUST be applied to the Request-URI of the request.
- Otherwise, the procedures are applied to the first Route header field
- value in the request (if one exists), or to the request's Request-URI
- if there is no Route header field present. These procedures yield an
- ordered set of address, port, and transports to attempt. Independent
- of which URI is used as input to the procedures of [4], if the
- Request-URI specifies a SIPS resource, the UAC MUST follow the
- procedures of [4] as if the input URI were a SIPS URI.
-
- Local policy MAY specify an alternate set of destinations to attempt.
- If the Request-URI contains a SIPS URI, any alternate destinations
- MUST be contacted with TLS. Beyond that, there are no restrictions
- on the alternate destinations if the request contains no Route header
- field. This provides a simple alternative to a pre-existing route
- set as a way to specify an outbound proxy. However, that approach
- for configuring an outbound proxy is NOT RECOMMENDED; a pre-existing
- route set with a single URI SHOULD be used instead. If the request
- contains a Route header field, the request SHOULD be sent to the
- locations derived from its topmost value, but MAY be sent to any
- server that the UA is certain will honor the Route and Request-URI
- policies specified in this document (as opposed to those in RFC
- 2543). In particular, a UAC configured with an outbound proxy SHOULD
-
-
-
-Rosenberg, et. al. Standards Track [Page 41]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- attempt to send the request to the location indicated in the first
- Route header field value instead of adopting the policy of sending
- all messages to the outbound proxy.
-
- This ensures that outbound proxies that do not add Record-Route
- header field values will drop out of the path of subsequent
- requests. It allows endpoints that cannot resolve the first Route
- URI to delegate that task to an outbound proxy.
-
- The UAC SHOULD follow the procedures defined in [4] for stateful
- elements, trying each address until a server is contacted. Each try
- constitutes a new transaction, and therefore each carries a different
- topmost Via header field value with a new branch parameter.
- Furthermore, the transport value in the Via header field is set to
- whatever transport was determined for the target server.
-
-8.1.3 Processing Responses
-
- Responses are first processed by the transport layer and then passed
- up to the transaction layer. The transaction layer performs its
- processing and then passes the response up to the TU. The majority
- of response processing in the TU is method specific. However, there
- are some general behaviors independent of the method.
-
-8.1.3.1 Transaction Layer Errors
-
- In some cases, the response returned by the transaction layer will
- not be a SIP message, but rather a transaction layer error. When a
- timeout error is received from the transaction layer, it MUST be
- treated as if a 408 (Request Timeout) status code has been received.
- If a fatal transport error is reported by the transport layer
- (generally, due to fatal ICMP errors in UDP or connection failures in
- TCP), the condition MUST be treated as a 503 (Service Unavailable)
- status code.
-
-8.1.3.2 Unrecognized Responses
-
- A UAC MUST treat any final response it does not recognize as being
- equivalent to the x00 response code of that class, and MUST be able
- to process the x00 response code for all classes. For example, if a
- UAC receives an unrecognized response code of 431, it can safely
- assume that there was something wrong with its request and treat the
- response as if it had received a 400 (Bad Request) response code. A
- UAC MUST treat any provisional response different than 100 that it
- does not recognize as 183 (Session Progress). A UAC MUST be able to
- process 100 and 183 responses.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 42]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-8.1.3.3 Vias
-
- If more than one Via header field value is present in a response, the
- UAC SHOULD discard the message.
-
- The presence of additional Via header field values that precede
- the originator of the request suggests that the message was
- misrouted or possibly corrupted.
-
-8.1.3.4 Processing 3xx Responses
-
- Upon receipt of a redirection response (for example, a 301 response
- status code), clients SHOULD use the URI(s) in the Contact header
- field to formulate one or more new requests based on the redirected
- request. This process is similar to that of a proxy recursing on a
- 3xx class response as detailed in Sections 16.5 and 16.6. A client
- starts with an initial target set containing exactly one URI, the
- Request-URI of the original request. If a client wishes to formulate
- new requests based on a 3xx class response to that request, it places
- the URIs to try into the target set. Subject to the restrictions in
- this specification, a client can choose which Contact URIs it places
- into the target set. As with proxy recursion, a client processing
- 3xx class responses MUST NOT add any given URI to the target set more
- than once. If the original request had a SIPS URI in the Request-
- URI, the client MAY choose to recurse to a non-SIPS URI, but SHOULD
- inform the user of the redirection to an insecure URI.
-
- Any new request may receive 3xx responses themselves containing
- the original URI as a contact. Two locations can be configured to
- redirect to each other. Placing any given URI in the target set
- only once prevents infinite redirection loops.
-
- As the target set grows, the client MAY generate new requests to the
- URIs in any order. A common mechanism is to order the set by the "q"
- parameter value from the Contact header field value. Requests to the
- URIs MAY be generated serially or in parallel. One approach is to
- process groups of decreasing q-values serially and process the URIs
- in each q-value group in parallel. Another is to perform only serial
- processing in decreasing q-value order, arbitrarily choosing between
- contacts of equal q-value.
-
- If contacting an address in the list results in a failure, as defined
- in the next paragraph, the element moves to the next address in the
- list, until the list is exhausted. If the list is exhausted, then
- the request has failed.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 43]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Failures SHOULD be detected through failure response codes (codes
- greater than 399); for network errors the client transaction will
- report any transport layer failures to the transaction user. Note
- that some response codes (detailed in 8.1.3.5) indicate that the
- request can be retried; requests that are reattempted should not be
- considered failures.
-
- When a failure for a particular contact address is received, the
- client SHOULD try the next contact address. This will involve
- creating a new client transaction to deliver a new request.
-
- In order to create a request based on a contact address in a 3xx
- response, a UAC MUST copy the entire URI from the target set into the
- Request-URI, except for the "method-param" and "header" URI
- parameters (see Section 19.1.1 for a definition of these parameters).
- It uses the "header" parameters to create header field values for the
- new request, overwriting header field values associated with the
- redirected request in accordance with the guidelines in Section
- 19.1.5.
-
- Note that in some instances, header fields that have been
- communicated in the contact address may instead append to existing
- request header fields in the original redirected request. As a
- general rule, if the header field can accept a comma-separated list
- of values, then the new header field value MAY be appended to any
- existing values in the original redirected request. If the header
- field does not accept multiple values, the value in the original
- redirected request MAY be overwritten by the header field value
- communicated in the contact address. For example, if a contact
- address is returned with the following value:
-
- sip:user@host?Subject=foo&Call-Info=<http://www.foo.com>
-
- Then any Subject header field in the original redirected request is
- overwritten, but the HTTP URL is merely appended to any existing
- Call-Info header field values.
-
- It is RECOMMENDED that the UAC reuse the same To, From, and Call-ID
- used in the original redirected request, but the UAC MAY also choose
- to update the Call-ID header field value for new requests, for
- example.
-
- Finally, once the new request has been constructed, it is sent using
- a new client transaction, and therefore MUST have a new branch ID in
- the top Via field as discussed in Section 8.1.1.7.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 44]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- In all other respects, requests sent upon receipt of a redirect
- response SHOULD re-use the header fields and bodies of the original
- request.
-
- In some instances, Contact header field values may be cached at UAC
- temporarily or permanently depending on the status code received and
- the presence of an expiration interval; see Sections 21.3.2 and
- 21.3.3.
-
-8.1.3.5 Processing 4xx Responses
-
- Certain 4xx response codes require specific UA processing,
- independent of the method.
-
- If a 401 (Unauthorized) or 407 (Proxy Authentication Required)
- response is received, the UAC SHOULD follow the authorization
- procedures of Section 22.2 and Section 22.3 to retry the request with
- credentials.
-
- If a 413 (Request Entity Too Large) response is received (Section
- 21.4.11), the request contained a body that was longer than the UAS
- was willing to accept. If possible, the UAC SHOULD retry the
- request, either omitting the body or using one of a smaller length.
-
- If a 415 (Unsupported Media Type) response is received (Section
- 21.4.13), the request contained media types not supported by the UAS.
- The UAC SHOULD retry sending the request, this time only using
- content with types listed in the Accept header field in the response,
- with encodings listed in the Accept-Encoding header field in the
- response, and with languages listed in the Accept-Language in the
- response.
-
- If a 416 (Unsupported URI Scheme) response is received (Section
- 21.4.14), the Request-URI used a URI scheme not supported by the
- server. The client SHOULD retry the request, this time, using a SIP
- URI.
-
- If a 420 (Bad Extension) response is received (Section 21.4.15), the
- request contained a Require or Proxy-Require header field listing an
- option-tag for a feature not supported by a proxy or UAS. The UAC
- SHOULD retry the request, this time omitting any extensions listed in
- the Unsupported header field in the response.
-
- In all of the above cases, the request is retried by creating a new
- request with the appropriate modifications. This new request
- constitutes a new transaction and SHOULD have the same value of the
- Call-ID, To, and From of the previous request, but the CSeq should
- contain a new sequence number that is one higher than the previous.
-
-
-
-Rosenberg, et. al. Standards Track [Page 45]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- With other 4xx responses, including those yet to be defined, a retry
- may or may not be possible depending on the method and the use case.
-
-8.2 UAS Behavior
-
- When a request outside of a dialog is processed by a UAS, there is a
- set of processing rules that are followed, independent of the method.
- Section 12 gives guidance on how a UAS can tell whether a request is
- inside or outside of a dialog.
-
- Note that request processing is atomic. If a request is accepted,
- all state changes associated with it MUST be performed. If it is
- rejected, all state changes MUST NOT be performed.
-
- UASs SHOULD process the requests in the order of the steps that
- follow in this section (that is, starting with authentication, then
- inspecting the method, the header fields, and so on throughout the
- remainder of this section).
-
-8.2.1 Method Inspection
-
- Once a request is authenticated (or authentication is skipped), the
- UAS MUST inspect the method of the request. If the UAS recognizes
- but does not support the method of a request, it MUST generate a 405
- (Method Not Allowed) response. Procedures for generating responses
- are described in Section 8.2.6. The UAS MUST also add an Allow
- header field to the 405 (Method Not Allowed) response. The Allow
- header field MUST list the set of methods supported by the UAS
- generating the message. The Allow header field is presented in
- Section 20.5.
-
- If the method is one supported by the server, processing continues.
-
-8.2.2 Header Inspection
-
- If a UAS does not understand a header field in a request (that is,
- the header field is not defined in this specification or in any
- supported extension), the server MUST ignore that header field and
- continue processing the message. A UAS SHOULD ignore any malformed
- header fields that are not necessary for processing requests.
-
-8.2.2.1 To and Request-URI
-
- The To header field identifies the original recipient of the request
- designated by the user identified in the From field. The original
- recipient may or may not be the UAS processing the request, due to
- call forwarding or other proxy operations. A UAS MAY apply any
- policy it wishes to determine whether to accept requests when the To
-
-
-
-Rosenberg, et. al. Standards Track [Page 46]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- header field is not the identity of the UAS. However, it is
- RECOMMENDED that a UAS accept requests even if they do not recognize
- the URI scheme (for example, a tel: URI) in the To header field, or
- if the To header field does not address a known or current user of
- this UAS. If, on the other hand, the UAS decides to reject the
- request, it SHOULD generate a response with a 403 (Forbidden) status
- code and pass it to the server transaction for transmission.
-
- However, the Request-URI identifies the UAS that is to process the
- request. If the Request-URI uses a scheme not supported by the UAS,
- it SHOULD reject the request with a 416 (Unsupported URI Scheme)
- response. If the Request-URI does not identify an address that the
- UAS is willing to accept requests for, it SHOULD reject the request
- with a 404 (Not Found) response. Typically, a UA that uses the
- REGISTER method to bind its address-of-record to a specific contact
- address will see requests whose Request-URI equals that contact
- address. Other potential sources of received Request-URIs include
- the Contact header fields of requests and responses sent by the UA
- that establish or refresh dialogs.
-
-8.2.2.2 Merged Requests
-
- If the request has no tag in the To header field, the UAS core MUST
- check the request against ongoing transactions. If the From tag,
- Call-ID, and CSeq exactly match those associated with an ongoing
- transaction, but the request does not match that transaction (based
- on the matching rules in Section 17.2.3), the UAS core SHOULD
- generate a 482 (Loop Detected) response and pass it to the server
- transaction.
-
- The same request has arrived at the UAS more than once, following
- different paths, most likely due to forking. The UAS processes
- the first such request received and responds with a 482 (Loop
- Detected) to the rest of them.
-
-8.2.2.3 Require
-
- Assuming the UAS decides that it is the proper element to process the
- request, it examines the Require header field, if present.
-
- The Require header field is used by a UAC to tell a UAS about SIP
- extensions that the UAC expects the UAS to support in order to
- process the request properly. Its format is described in Section
- 20.32. If a UAS does not understand an option-tag listed in a
- Require header field, it MUST respond by generating a response with
- status code 420 (Bad Extension). The UAS MUST add an Unsupported
- header field, and list in it those options it does not understand
- amongst those in the Require header field of the request.
-
-
-
-Rosenberg, et. al. Standards Track [Page 47]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Note that Require and Proxy-Require MUST NOT be used in a SIP CANCEL
- request, or in an ACK request sent for a non-2xx response. These
- header fields MUST be ignored if they are present in these requests.
-
- An ACK request for a 2xx response MUST contain only those Require and
- Proxy-Require values that were present in the initial request.
-
- Example:
-
- UAC->UAS: INVITE sip:watson@bell-telephone.com SIP/2.0
- Require: 100rel
-
- UAS->UAC: SIP/2.0 420 Bad Extension
- Unsupported: 100rel
-
- This behavior ensures that the client-server interaction will
- proceed without delay when all options are understood by both
- sides, and only slow down if options are not understood (as in the
- example above). For a well-matched client-server pair, the
- interaction proceeds quickly, saving a round-trip often required
- by negotiation mechanisms. In addition, it also removes ambiguity
- when the client requires features that the server does not
- understand. Some features, such as call handling fields, are only
- of interest to end systems.
-
-8.2.3 Content Processing
-
- Assuming the UAS understands any extensions required by the client,
- the UAS examines the body of the message, and the header fields that
- describe it. If there are any bodies whose type (indicated by the
- Content-Type), language (indicated by the Content-Language) or
- encoding (indicated by the Content-Encoding) are not understood, and
- that body part is not optional (as indicated by the Content-
- Disposition header field), the UAS MUST reject the request with a 415
- (Unsupported Media Type) response. The response MUST contain an
- Accept header field listing the types of all bodies it understands,
- in the event the request contained bodies of types not supported by
- the UAS. If the request contained content encodings not understood
- by the UAS, the response MUST contain an Accept-Encoding header field
- listing the encodings understood by the UAS. If the request
- contained content with languages not understood by the UAS, the
- response MUST contain an Accept-Language header field indicating the
- languages understood by the UAS. Beyond these checks, body handling
- depends on the method and type. For further information on the
- processing of content-specific header fields, see Section 7.4 as well
- as Section 20.11 through 20.15.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 48]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-8.2.4 Applying Extensions
-
- A UAS that wishes to apply some extension when generating the
- response MUST NOT do so unless support for that extension is
- indicated in the Supported header field in the request. If the
- desired extension is not supported, the server SHOULD rely only on
- baseline SIP and any other extensions supported by the client. In
- rare circumstances, where the server cannot process the request
- without the extension, the server MAY send a 421 (Extension Required)
- response. This response indicates that the proper response cannot be
- generated without support of a specific extension. The needed
- extension(s) MUST be included in a Require header field in the
- response. This behavior is NOT RECOMMENDED, as it will generally
- break interoperability.
-
- Any extensions applied to a non-421 response MUST be listed in a
- Require header field included in the response. Of course, the server
- MUST NOT apply extensions not listed in the Supported header field in
- the request. As a result of this, the Require header field in a
- response will only ever contain option tags defined in standards-
- track RFCs.
-
-8.2.5 Processing the Request
-
- Assuming all of the checks in the previous subsections are passed,
- the UAS processing becomes method-specific. Section 10 covers the
- REGISTER request, Section 11 covers the OPTIONS request, Section 13
- covers the INVITE request, and Section 15 covers the BYE request.
-
-8.2.6 Generating the Response
-
- When a UAS wishes to construct a response to a request, it follows
- the general procedures detailed in the following subsections.
- Additional behaviors specific to the response code in question, which
- are not detailed in this section, may also be required.
-
- Once all procedures associated with the creation of a response have
- been completed, the UAS hands the response back to the server
- transaction from which it received the request.
-
-8.2.6.1 Sending a Provisional Response
-
- One largely non-method-specific guideline for the generation of
- responses is that UASs SHOULD NOT issue a provisional response for a
- non-INVITE request. Rather, UASs SHOULD generate a final response to
- a non-INVITE request as soon as possible.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 49]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- When a 100 (Trying) response is generated, any Timestamp header field
- present in the request MUST be copied into this 100 (Trying)
- response. If there is a delay in generating the response, the UAS
- SHOULD add a delay value into the Timestamp value in the response.
- This value MUST contain the difference between the time of sending of
- the response and receipt of the request, measured in seconds.
-
-8.2.6.2 Headers and Tags
-
- The From field of the response MUST equal the From header field of
- the request. The Call-ID header field of the response MUST equal the
- Call-ID header field of the request. The CSeq header field of the
- response MUST equal the CSeq field of the request. The Via header
- field values in the response MUST equal the Via header field values
- in the request and MUST maintain the same ordering.
-
- If a request contained a To tag in the request, the To header field
- in the response MUST equal that of the request. However, if the To
- header field in the request did not contain a tag, the URI in the To
- header field in the response MUST equal the URI in the To header
- field; additionally, the UAS MUST add a tag to the To header field in
- the response (with the exception of the 100 (Trying) response, in
- which a tag MAY be present). This serves to identify the UAS that is
- responding, possibly resulting in a component of a dialog ID. The
- same tag MUST be used for all responses to that request, both final
- and provisional (again excepting the 100 (Trying)). Procedures for
- the generation of tags are defined in Section 19.3.
-
-8.2.7 Stateless UAS Behavior
-
- A stateless UAS is a UAS that does not maintain transaction state.
- It replies to requests normally, but discards any state that would
- ordinarily be retained by a UAS after a response has been sent. If a
- stateless UAS receives a retransmission of a request, it regenerates
- the response and resends it, just as if it were replying to the first
- instance of the request. A UAS cannot be stateless unless the request
- processing for that method would always result in the same response
- if the requests are identical. This rules out stateless registrars,
- for example. Stateless UASs do not use a transaction layer; they
- receive requests directly from the transport layer and send responses
- directly to the transport layer.
-
- The stateless UAS role is needed primarily to handle unauthenticated
- requests for which a challenge response is issued. If
- unauthenticated requests were handled statefully, then malicious
- floods of unauthenticated requests could create massive amounts of
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 50]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- transaction state that might slow or completely halt call processing
- in a UAS, effectively creating a denial of service condition; for
- more information see Section 26.1.5.
-
- The most important behaviors of a stateless UAS are the following:
-
- o A stateless UAS MUST NOT send provisional (1xx) responses.
-
- o A stateless UAS MUST NOT retransmit responses.
-
- o A stateless UAS MUST ignore ACK requests.
-
- o A stateless UAS MUST ignore CANCEL requests.
-
- o To header tags MUST be generated for responses in a stateless
- manner - in a manner that will generate the same tag for the
- same request consistently. For information on tag construction
- see Section 19.3.
-
- In all other respects, a stateless UAS behaves in the same manner as
- a stateful UAS. A UAS can operate in either a stateful or stateless
- mode for each new request.
-
-8.3 Redirect Servers
-
- In some architectures it may be desirable to reduce the processing
- load on proxy servers that are responsible for routing requests, and
- improve signaling path robustness, by relying on redirection.
-
- Redirection allows servers to push routing information for a request
- back in a response to the client, thereby taking themselves out of
- the loop of further messaging for this transaction while still aiding
- in locating the target of the request. When the originator of the
- request receives the redirection, it will send a new request based on
- the URI(s) it has received. By propagating URIs from the core of the
- network to its edges, redirection allows for considerable network
- scalability.
-
- A redirect server is logically constituted of a server transaction
- layer and a transaction user that has access to a location service of
- some kind (see Section 10 for more on registrars and location
- services). This location service is effectively a database
- containing mappings between a single URI and a set of one or more
- alternative locations at which the target of that URI can be found.
-
- A redirect server does not issue any SIP requests of its own. After
- receiving a request other than CANCEL, the server either refuses the
- request or gathers the list of alternative locations from the
-
-
-
-Rosenberg, et. al. Standards Track [Page 51]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- location service and returns a final response of class 3xx. For
- well-formed CANCEL requests, it SHOULD return a 2xx response. This
- response ends the SIP transaction. The redirect server maintains
- transaction state for an entire SIP transaction. It is the
- responsibility of clients to detect forwarding loops between redirect
- servers.
-
- When a redirect server returns a 3xx response to a request, it
- populates the list of (one or more) alternative locations into the
- Contact header field. An "expires" parameter to the Contact header
- field values may also be supplied to indicate the lifetime of the
- Contact data.
-
- The Contact header field contains URIs giving the new locations or
- user names to try, or may simply specify additional transport
- parameters. A 301 (Moved Permanently) or 302 (Moved Temporarily)
- response may also give the same location and username that was
- targeted by the initial request but specify additional transport
- parameters such as a different server or multicast address to try, or
- a change of SIP transport from UDP to TCP or vice versa.
-
- However, redirect servers MUST NOT redirect a request to a URI equal
- to the one in the Request-URI; instead, provided that the URI does
- not point to itself, the server MAY proxy the request to the
- destination URI, or MAY reject it with a 404.
-
- If a client is using an outbound proxy, and that proxy actually
- redirects requests, a potential arises for infinite redirection
- loops.
-
- Note that a Contact header field value MAY also refer to a different
- resource than the one originally called. For example, a SIP call
- connected to PSTN gateway may need to deliver a special informational
- announcement such as "The number you have dialed has been changed."
-
- A Contact response header field can contain any suitable URI
- indicating where the called party can be reached, not limited to SIP
- URIs. For example, it could contain URIs for phones, fax, or irc (if
- they were defined) or a mailto: (RFC 2368 [32]) URL. Section 26.4.4
- discusses implications and limitations of redirecting a SIPS URI to a
- non-SIPS URI.
-
- The "expires" parameter of a Contact header field value indicates how
- long the URI is valid. The value of the parameter is a number
- indicating seconds. If this parameter is not provided, the value of
- the Expires header field determines how long the URI is valid.
- Malformed values SHOULD be treated as equivalent to 3600.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 52]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- This provides a modest level of backwards compatibility with RFC
- 2543, which allowed absolute times in this header field. If an
- absolute time is received, it will be treated as malformed, and
- then default to 3600.
-
- Redirect servers MUST ignore features that are not understood
- (including unrecognized header fields, any unknown option tags in
- Require, or even method names) and proceed with the redirection of
- the request in question.
-
-9 Canceling a Request
-
- The previous section has discussed general UA behavior for generating
- requests and processing responses for requests of all methods. In
- this section, we discuss a general purpose method, called CANCEL.
-
- The CANCEL request, as the name implies, is used to cancel a previous
- request sent by a client. Specifically, it asks the UAS to cease
- processing the request and to generate an error response to that
- request. CANCEL has no effect on a request to which a UAS has
- already given a final response. Because of this, it is most useful
- to CANCEL requests to which it can take a server long time to
- respond. For this reason, CANCEL is best for INVITE requests, which
- can take a long time to generate a response. In that usage, a UAS
- that receives a CANCEL request for an INVITE, but has not yet sent a
- final response, would "stop ringing", and then respond to the INVITE
- with a specific error response (a 487).
-
- CANCEL requests can be constructed and sent by both proxies and user
- agent clients. Section 15 discusses under what conditions a UAC
- would CANCEL an INVITE request, and Section 16.10 discusses proxy
- usage of CANCEL.
-
- A stateful proxy responds to a CANCEL, rather than simply forwarding
- a response it would receive from a downstream element. For that
- reason, CANCEL is referred to as a "hop-by-hop" request, since it is
- responded to at each stateful proxy hop.
-
-9.1 Client Behavior
-
- A CANCEL request SHOULD NOT be sent to cancel a request other than
- INVITE.
-
- Since requests other than INVITE are responded to immediately,
- sending a CANCEL for a non-INVITE request would always create a
- race condition.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 53]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The following procedures are used to construct a CANCEL request. The
- Request-URI, Call-ID, To, the numeric part of CSeq, and From header
- fields in the CANCEL request MUST be identical to those in the
- request being cancelled, including tags. A CANCEL constructed by a
- client MUST have only a single Via header field value matching the
- top Via value in the request being cancelled. Using the same values
- for these header fields allows the CANCEL to be matched with the
- request it cancels (Section 9.2 indicates how such matching occurs).
- However, the method part of the CSeq header field MUST have a value
- of CANCEL. This allows it to be identified and processed as a
- transaction in its own right (See Section 17).
-
- If the request being cancelled contains a Route header field, the
- CANCEL request MUST include that Route header field's values.
-
- This is needed so that stateless proxies are able to route CANCEL
- requests properly.
-
- The CANCEL request MUST NOT contain any Require or Proxy-Require
- header fields.
-
- Once the CANCEL is constructed, the client SHOULD check whether it
- has received any response (provisional or final) for the request
- being cancelled (herein referred to as the "original request").
-
- If no provisional response has been received, the CANCEL request MUST
- NOT be sent; rather, the client MUST wait for the arrival of a
- provisional response before sending the request. If the original
- request has generated a final response, the CANCEL SHOULD NOT be
- sent, as it is an effective no-op, since CANCEL has no effect on
- requests that have already generated a final response. When the
- client decides to send the CANCEL, it creates a client transaction
- for the CANCEL and passes it the CANCEL request along with the
- destination address, port, and transport. The destination address,
- port, and transport for the CANCEL MUST be identical to those used to
- send the original request.
-
- If it was allowed to send the CANCEL before receiving a response
- for the previous request, the server could receive the CANCEL
- before the original request.
-
- Note that both the transaction corresponding to the original request
- and the CANCEL transaction will complete independently. However, a
- UAC canceling a request cannot rely on receiving a 487 (Request
- Terminated) response for the original request, as an RFC 2543-
- compliant UAS will not generate such a response. If there is no
- final response for the original request in 64*T1 seconds (T1 is
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 54]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- defined in Section 17.1.1.1), the client SHOULD then consider the
- original transaction cancelled and SHOULD destroy the client
- transaction handling the original request.
-
-9.2 Server Behavior
-
- The CANCEL method requests that the TU at the server side cancel a
- pending transaction. The TU determines the transaction to be
- cancelled by taking the CANCEL request, and then assuming that the
- request method is anything but CANCEL or ACK and applying the
- transaction matching procedures of Section 17.2.3. The matching
- transaction is the one to be cancelled.
-
- The processing of a CANCEL request at a server depends on the type of
- server. A stateless proxy will forward it, a stateful proxy might
- respond to it and generate some CANCEL requests of its own, and a UAS
- will respond to it. See Section 16.10 for proxy treatment of CANCEL.
-
- A UAS first processes the CANCEL request according to the general UAS
- processing described in Section 8.2. However, since CANCEL requests
- are hop-by-hop and cannot be resubmitted, they cannot be challenged
- by the server in order to get proper credentials in an Authorization
- header field. Note also that CANCEL requests do not contain a
- Require header field.
-
- If the UAS did not find a matching transaction for the CANCEL
- according to the procedure above, it SHOULD respond to the CANCEL
- with a 481 (Call Leg/Transaction Does Not Exist). If the transaction
- for the original request still exists, the behavior of the UAS on
- receiving a CANCEL request depends on whether it has already sent a
- final response for the original request. If it has, the CANCEL
- request has no effect on the processing of the original request, no
- effect on any session state, and no effect on the responses generated
- for the original request. If the UAS has not issued a final response
- for the original request, its behavior depends on the method of the
- original request. If the original request was an INVITE, the UAS
- SHOULD immediately respond to the INVITE with a 487 (Request
- Terminated). A CANCEL request has no impact on the processing of
- transactions with any other method defined in this specification.
-
- Regardless of the method of the original request, as long as the
- CANCEL matched an existing transaction, the UAS answers the CANCEL
- request itself with a 200 (OK) response. This response is
- constructed following the procedures described in Section 8.2.6
- noting that the To tag of the response to the CANCEL and the To tag
- in the response to the original request SHOULD be the same. The
- response to CANCEL is passed to the server transaction for
- transmission.
-
-
-
-Rosenberg, et. al. Standards Track [Page 55]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-10 Registrations
-
-10.1 Overview
-
- SIP offers a discovery capability. If a user wants to initiate a
- session with another user, SIP must discover the current host(s) at
- which the destination user is reachable. This discovery process is
- frequently accomplished by SIP network elements such as proxy servers
- and redirect servers which are responsible for receiving a request,
- determining where to send it based on knowledge of the location of
- the user, and then sending it there. To do this, SIP network
- elements consult an abstract service known as a location service,
- which provides address bindings for a particular domain. These
- address bindings map an incoming SIP or SIPS URI, sip:bob@biloxi.com,
- for example, to one or more URIs that are somehow "closer" to the
- desired user, sip:bob@engineering.biloxi.com, for example.
- Ultimately, a proxy will consult a location service that maps a
- received URI to the user agent(s) at which the desired recipient is
- currently residing.
-
- Registration creates bindings in a location service for a particular
- domain that associates an address-of-record URI with one or more
- contact addresses. Thus, when a proxy for that domain receives a
- request whose Request-URI matches the address-of-record, the proxy
- will forward the request to the contact addresses registered to that
- address-of-record. Generally, it only makes sense to register an
- address-of-record at a domain's location service when requests for
- that address-of-record would be routed to that domain. In most
- cases, this means that the domain of the registration will need to
- match the domain in the URI of the address-of-record.
-
- There are many ways by which the contents of the location service can
- be established. One way is administratively. In the above example,
- Bob is known to be a member of the engineering department through
- access to a corporate database. However, SIP provides a mechanism
- for a UA to create a binding explicitly. This mechanism is known as
- registration.
-
- Registration entails sending a REGISTER request to a special type of
- UAS known as a registrar. A registrar acts as the front end to the
- location service for a domain, reading and writing mappings based on
- the contents of REGISTER requests. This location service is then
- typically consulted by a proxy server that is responsible for routing
- requests for that domain.
-
- An illustration of the overall registration process is given in
- Figure 2. Note that the registrar and proxy server are logical roles
- that can be played by a single device in a network; for purposes of
-
-
-
-Rosenberg, et. al. Standards Track [Page 56]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- clarity the two are separated in this illustration. Also note that
- UAs may send requests through a proxy server in order to reach a
- registrar if the two are separate elements.
-
- SIP does not mandate a particular mechanism for implementing the
- location service. The only requirement is that a registrar for some
- domain MUST be able to read and write data to the location service,
- and a proxy or a redirect server for that domain MUST be capable of
- reading that same data. A registrar MAY be co-located with a
- particular SIP proxy server for the same domain.
-
-10.2 Constructing the REGISTER Request
-
- REGISTER requests add, remove, and query bindings. A REGISTER
- request can add a new binding between an address-of-record and one or
- more contact addresses. Registration on behalf of a particular
- address-of-record can be performed by a suitably authorized third
- party. A client can also remove previous bindings or query to
- determine which bindings are currently in place for an address-of-
- record.
-
- Except as noted, the construction of the REGISTER request and the
- behavior of clients sending a REGISTER request is identical to the
- general UAC behavior described in Section 8.1 and Section 17.1.
-
- A REGISTER request does not establish a dialog. A UAC MAY include a
- Route header field in a REGISTER request based on a pre-existing
- route set as described in Section 8.1. The Record-Route header field
- has no meaning in REGISTER requests or responses, and MUST be ignored
- if present. In particular, the UAC MUST NOT create a new route set
- based on the presence or absence of a Record-Route header field in
- any response to a REGISTER request.
-
- The following header fields, except Contact, MUST be included in a
- REGISTER request. A Contact header field MAY be included:
-
- Request-URI: The Request-URI names the domain of the location
- service for which the registration is meant (for example,
- "sip:chicago.com"). The "userinfo" and "@" components of the
- SIP URI MUST NOT be present.
-
- To: The To header field contains the address of record whose
- registration is to be created, queried, or modified. The To
- header field and the Request-URI field typically differ, as
- the former contains a user name. This address-of-record MUST
- be a SIP URI or SIPS URI.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 57]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- From: The From header field contains the address-of-record of the
- person responsible for the registration. The value is the
- same as the To header field unless the request is a third-
- party registration.
-
- Call-ID: All registrations from a UAC SHOULD use the same Call-ID
- header field value for registrations sent to a particular
- registrar.
-
- If the same client were to use different Call-ID values, a
- registrar could not detect whether a delayed REGISTER request
- might have arrived out of order.
-
- CSeq: The CSeq value guarantees proper ordering of REGISTER
- requests. A UA MUST increment the CSeq value by one for each
- REGISTER request with the same Call-ID.
-
- Contact: REGISTER requests MAY contain a Contact header field with
- zero or more values containing address bindings.
-
- UAs MUST NOT send a new registration (that is, containing new Contact
- header field values, as opposed to a retransmission) until they have
- received a final response from the registrar for the previous one or
- the previous REGISTER request has timed out.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 58]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- bob
- +----+
- | UA |
- | |
- +----+
- |
- |3)INVITE
- | carol@chicago.com
- chicago.com +--------+ V
- +---------+ 2)Store|Location|4)Query +-----+
- |Registrar|=======>| Service|<=======|Proxy|sip.chicago.com
- +---------+ +--------+=======>+-----+
- A 5)Resp |
- | |
- | |
- 1)REGISTER| |
- | |
- +----+ |
- | UA |<-------------------------------+
- cube2214a| | 6)INVITE
- +----+ carol@cube2214a.chicago.com
- carol
-
- Figure 2: REGISTER example
-
- The following Contact header parameters have a special meaning in
- REGISTER requests:
-
- action: The "action" parameter from RFC 2543 has been deprecated.
- UACs SHOULD NOT use the "action" parameter.
-
- expires: The "expires" parameter indicates how long the UA would
- like the binding to be valid. The value is a number
- indicating seconds. If this parameter is not provided, the
- value of the Expires header field is used instead.
- Implementations MAY treat values larger than 2**32-1
- (4294967295 seconds or 136 years) as equivalent to 2**32-1.
- Malformed values SHOULD be treated as equivalent to 3600.
-
-10.2.1 Adding Bindings
-
- The REGISTER request sent to a registrar includes the contact
- address(es) to which SIP requests for the address-of-record should be
- forwarded. The address-of-record is included in the To header field
- of the REGISTER request.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 59]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The Contact header field values of the request typically consist of
- SIP or SIPS URIs that identify particular SIP endpoints (for example,
- "sip:carol@cube2214a.chicago.com"), but they MAY use any URI scheme.
- A SIP UA can choose to register telephone numbers (with the tel URL,
- RFC 2806 [9]) or email addresses (with a mailto URL, RFC 2368 [32])
- as Contacts for an address-of-record, for example.
-
- For example, Carol, with address-of-record "sip:carol@chicago.com",
- would register with the SIP registrar of the domain chicago.com. Her
- registrations would then be used by a proxy server in the chicago.com
- domain to route requests for Carol's address-of-record to her SIP
- endpoint.
-
- Once a client has established bindings at a registrar, it MAY send
- subsequent registrations containing new bindings or modifications to
- existing bindings as necessary. The 2xx response to the REGISTER
- request will contain, in a Contact header field, a complete list of
- bindings that have been registered for this address-of-record at this
- registrar.
-
- If the address-of-record in the To header field of a REGISTER request
- is a SIPS URI, then any Contact header field values in the request
- SHOULD also be SIPS URIs. Clients should only register non-SIPS URIs
- under a SIPS address-of-record when the security of the resource
- represented by the contact address is guaranteed by other means.
- This may be applicable to URIs that invoke protocols other than SIP,
- or SIP devices secured by protocols other than TLS.
-
- Registrations do not need to update all bindings. Typically, a UA
- only updates its own contact addresses.
-
-10.2.1.1 Setting the Expiration Interval of Contact Addresses
-
- When a client sends a REGISTER request, it MAY suggest an expiration
- interval that indicates how long the client would like the
- registration to be valid. (As described in Section 10.3, the
- registrar selects the actual time interval based on its local
- policy.)
-
- There are two ways in which a client can suggest an expiration
- interval for a binding: through an Expires header field or an
- "expires" Contact header parameter. The latter allows expiration
- intervals to be suggested on a per-binding basis when more than one
- binding is given in a single REGISTER request, whereas the former
- suggests an expiration interval for all Contact header field values
- that do not contain the "expires" parameter.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 60]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- If neither mechanism for expressing a suggested expiration time is
- present in a REGISTER, the client is indicating its desire for the
- server to choose.
-
-10.2.1.2 Preferences among Contact Addresses
-
- If more than one Contact is sent in a REGISTER request, the
- registering UA intends to associate all of the URIs in these Contact
- header field values with the address-of-record present in the To
- field. This list can be prioritized with the "q" parameter in the
- Contact header field. The "q" parameter indicates a relative
- preference for the particular Contact header field value compared to
- other bindings for this address-of-record. Section 16.6 describes
- how a proxy server uses this preference indication.
-
-10.2.2 Removing Bindings
-
- Registrations are soft state and expire unless refreshed, but can
- also be explicitly removed. A client can attempt to influence the
- expiration interval selected by the registrar as described in Section
- 10.2.1. A UA requests the immediate removal of a binding by
- specifying an expiration interval of "0" for that contact address in
- a REGISTER request. UAs SHOULD support this mechanism so that
- bindings can be removed before their expiration interval has passed.
-
- The REGISTER-specific Contact header field value of "*" applies to
- all registrations, but it MUST NOT be used unless the Expires header
- field is present with a value of "0".
-
- Use of the "*" Contact header field value allows a registering UA
- to remove all bindings associated with an address-of-record
- without knowing their precise values.
-
-10.2.3 Fetching Bindings
-
- A success response to any REGISTER request contains the complete list
- of existing bindings, regardless of whether the request contained a
- Contact header field. If no Contact header field is present in a
- REGISTER request, the list of bindings is left unchanged.
-
-10.2.4 Refreshing Bindings
-
- Each UA is responsible for refreshing the bindings that it has
- previously established. A UA SHOULD NOT refresh bindings set up by
- other UAs.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 61]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The 200 (OK) response from the registrar contains a list of Contact
- fields enumerating all current bindings. The UA compares each
- contact address to see if it created the contact address, using
- comparison rules in Section 19.1.4. If so, it updates the expiration
- time interval according to the expires parameter or, if absent, the
- Expires field value. The UA then issues a REGISTER request for each
- of its bindings before the expiration interval has elapsed. It MAY
- combine several updates into one REGISTER request.
-
- A UA SHOULD use the same Call-ID for all registrations during a
- single boot cycle. Registration refreshes SHOULD be sent to the same
- network address as the original registration, unless redirected.
-
-10.2.5 Setting the Internal Clock
-
- If the response for a REGISTER request contains a Date header field,
- the client MAY use this header field to learn the current time in
- order to set any internal clocks.
-
-10.2.6 Discovering a Registrar
-
- UAs can use three ways to determine the address to which to send
- registrations: by configuration, using the address-of-record, and
- multicast. A UA can be configured, in ways beyond the scope of this
- specification, with a registrar address. If there is no configured
- registrar address, the UA SHOULD use the host part of the address-
- of-record as the Request-URI and address the request there, using the
- normal SIP server location mechanisms [4]. For example, the UA for
- the user "sip:carol@chicago.com" addresses the REGISTER request to
- "sip:chicago.com".
-
- Finally, a UA can be configured to use multicast. Multicast
- registrations are addressed to the well-known "all SIP servers"
- multicast address "sip.mcast.net" (224.0.1.75 for IPv4). No well-
- known IPv6 multicast address has been allocated; such an allocation
- will be documented separately when needed. SIP UAs MAY listen to
- that address and use it to become aware of the location of other
- local users (see [33]); however, they do not respond to the request.
-
- Multicast registration may be inappropriate in some environments,
- for example, if multiple businesses share the same local area
- network.
-
-10.2.7 Transmitting a Request
-
- Once the REGISTER method has been constructed, and the destination of
- the message identified, UACs follow the procedures described in
- Section 8.1.2 to hand off the REGISTER to the transaction layer.
-
-
-
-Rosenberg, et. al. Standards Track [Page 62]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- If the transaction layer returns a timeout error because the REGISTER
- yielded no response, the UAC SHOULD NOT immediately re-attempt a
- registration to the same registrar.
-
- An immediate re-attempt is likely to also timeout. Waiting some
- reasonable time interval for the conditions causing the timeout to
- be corrected reduces unnecessary load on the network. No specific
- interval is mandated.
-
-10.2.8 Error Responses
-
- If a UA receives a 423 (Interval Too Brief) response, it MAY retry
- the registration after making the expiration interval of all contact
- addresses in the REGISTER request equal to or greater than the
- expiration interval within the Min-Expires header field of the 423
- (Interval Too Brief) response.
-
-10.3 Processing REGISTER Requests
-
- A registrar is a UAS that responds to REGISTER requests and maintains
- a list of bindings that are accessible to proxy servers and redirect
- servers within its administrative domain. A registrar handles
- requests according to Section 8.2 and Section 17.2, but it accepts
- only REGISTER requests. A registrar MUST not generate 6xx responses.
-
- A registrar MAY redirect REGISTER requests as appropriate. One
- common usage would be for a registrar listening on a multicast
- interface to redirect multicast REGISTER requests to its own unicast
- interface with a 302 (Moved Temporarily) response.
-
- Registrars MUST ignore the Record-Route header field if it is
- included in a REGISTER request. Registrars MUST NOT include a
- Record-Route header field in any response to a REGISTER request.
-
- A registrar might receive a request that traversed a proxy which
- treats REGISTER as an unknown request and which added a Record-
- Route header field value.
-
- A registrar has to know (for example, through configuration) the set
- of domain(s) for which it maintains bindings. REGISTER requests MUST
- be processed by a registrar in the order that they are received.
- REGISTER requests MUST also be processed atomically, meaning that a
- particular REGISTER request is either processed completely or not at
- all. Each REGISTER message MUST be processed independently of any
- other registration or binding changes.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 63]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- When receiving a REGISTER request, a registrar follows these steps:
-
- 1. The registrar inspects the Request-URI to determine whether it
- has access to bindings for the domain identified in the
- Request-URI. If not, and if the server also acts as a proxy
- server, the server SHOULD forward the request to the addressed
- domain, following the general behavior for proxying messages
- described in Section 16.
-
- 2. To guarantee that the registrar supports any necessary
- extensions, the registrar MUST process the Require header field
- values as described for UASs in Section 8.2.2.
-
- 3. A registrar SHOULD authenticate the UAC. Mechanisms for the
- authentication of SIP user agents are described in Section 22.
- Registration behavior in no way overrides the generic
- authentication framework for SIP. If no authentication
- mechanism is available, the registrar MAY take the From address
- as the asserted identity of the originator of the request.
-
- 4. The registrar SHOULD determine if the authenticated user is
- authorized to modify registrations for this address-of-record.
- For example, a registrar might consult an authorization
- database that maps user names to a list of addresses-of-record
- for which that user has authorization to modify bindings. If
- the authenticated user is not authorized to modify bindings,
- the registrar MUST return a 403 (Forbidden) and skip the
- remaining steps.
-
- In architectures that support third-party registration, one
- entity may be responsible for updating the registrations
- associated with multiple addresses-of-record.
-
- 5. The registrar extracts the address-of-record from the To header
- field of the request. If the address-of-record is not valid
- for the domain in the Request-URI, the registrar MUST send a
- 404 (Not Found) response and skip the remaining steps. The URI
- MUST then be converted to a canonical form. To do that, all
- URI parameters MUST be removed (including the user-param), and
- any escaped characters MUST be converted to their unescaped
- form. The result serves as an index into the list of bindings.
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 64]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 6. The registrar checks whether the request contains the Contact
- header field. If not, it skips to the last step. If the
- Contact header field is present, the registrar checks if there
- is one Contact field value that contains the special value "*"
- and an Expires field. If the request has additional Contact
- fields or an expiration time other than zero, the request is
- invalid, and the server MUST return a 400 (Invalid Request) and
- skip the remaining steps. If not, the registrar checks whether
- the Call-ID agrees with the value stored for each binding. If
- not, it MUST remove the binding. If it does agree, it MUST
- remove the binding only if the CSeq in the request is higher
- than the value stored for that binding. Otherwise, the update
- MUST be aborted and the request fails.
-
- 7. The registrar now processes each contact address in the Contact
- header field in turn. For each address, it determines the
- expiration interval as follows:
-
- - If the field value has an "expires" parameter, that value
- MUST be taken as the requested expiration.
-
- - If there is no such parameter, but the request has an
- Expires header field, that value MUST be taken as the
- requested expiration.
-
- - If there is neither, a locally-configured default value MUST
- be taken as the requested expiration.
-
- The registrar MAY choose an expiration less than the requested
- expiration interval. If and only if the requested expiration
- interval is greater than zero AND smaller than one hour AND
- less than a registrar-configured minimum, the registrar MAY
- reject the registration with a response of 423 (Interval Too
- Brief). This response MUST contain a Min-Expires header field
- that states the minimum expiration interval the registrar is
- willing to honor. It then skips the remaining steps.
-
- Allowing the registrar to set the registration interval
- protects it against excessively frequent registration refreshes
- while limiting the state that it needs to maintain and
- decreasing the likelihood of registrations going stale. The
- expiration interval of a registration is frequently used in the
- creation of services. An example is a follow-me service, where
- the user may only be available at a terminal for a brief
- period. Therefore, registrars should accept brief
- registrations; a request should only be rejected if the
- interval is so short that the refreshes would degrade registrar
- performance.
-
-
-
-Rosenberg, et. al. Standards Track [Page 65]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- For each address, the registrar then searches the list of
- current bindings using the URI comparison rules. If the
- binding does not exist, it is tentatively added. If the
- binding does exist, the registrar checks the Call-ID value. If
- the Call-ID value in the existing binding differs from the
- Call-ID value in the request, the binding MUST be removed if
- the expiration time is zero and updated otherwise. If they are
- the same, the registrar compares the CSeq value. If the value
- is higher than that of the existing binding, it MUST update or
- remove the binding as above. If not, the update MUST be
- aborted and the request fails.
-
- This algorithm ensures that out-of-order requests from the same
- UA are ignored.
-
- Each binding record records the Call-ID and CSeq values from
- the request.
-
- The binding updates MUST be committed (that is, made visible to
- the proxy or redirect server) if and only if all binding
- updates and additions succeed. If any one of them fails (for
- example, because the back-end database commit failed), the
- request MUST fail with a 500 (Server Error) response and all
- tentative binding updates MUST be removed.
-
- 8. The registrar returns a 200 (OK) response. The response MUST
- contain Contact header field values enumerating all current
- bindings. Each Contact value MUST feature an "expires"
- parameter indicating its expiration interval chosen by the
- registrar. The response SHOULD include a Date header field.
-
-11 Querying for Capabilities
-
- The SIP method OPTIONS allows a UA to query another UA or a proxy
- server as to its capabilities. This allows a client to discover
- information about the supported methods, content types, extensions,
- codecs, etc. without "ringing" the other party. For example, before
- a client inserts a Require header field into an INVITE listing an
- option that it is not certain the destination UAS supports, the
- client can query the destination UAS with an OPTIONS to see if this
- option is returned in a Supported header field. All UAs MUST support
- the OPTIONS method.
-
- The target of the OPTIONS request is identified by the Request-URI,
- which could identify another UA or a SIP server. If the OPTIONS is
- addressed to a proxy server, the Request-URI is set without a user
- part, similar to the way a Request-URI is set for a REGISTER request.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 66]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Alternatively, a server receiving an OPTIONS request with a Max-
- Forwards header field value of 0 MAY respond to the request
- regardless of the Request-URI.
-
- This behavior is common with HTTP/1.1. This behavior can be used
- as a "traceroute" functionality to check the capabilities of
- individual hop servers by sending a series of OPTIONS requests
- with incremented Max-Forwards values.
-
- As is the case for general UA behavior, the transaction layer can
- return a timeout error if the OPTIONS yields no response. This may
- indicate that the target is unreachable and hence unavailable.
-
- An OPTIONS request MAY be sent as part of an established dialog to
- query the peer on capabilities that may be utilized later in the
- dialog.
-
-11.1 Construction of OPTIONS Request
-
- An OPTIONS request is constructed using the standard rules for a SIP
- request as discussed in Section 8.1.1.
-
- A Contact header field MAY be present in an OPTIONS.
-
- An Accept header field SHOULD be included to indicate the type of
- message body the UAC wishes to receive in the response. Typically,
- this is set to a format that is used to describe the media
- capabilities of a UA, such as SDP (application/sdp).
-
- The response to an OPTIONS request is assumed to be scoped to the
- Request-URI in the original request. However, only when an OPTIONS
- is sent as part of an established dialog is it guaranteed that future
- requests will be received by the server that generated the OPTIONS
- response.
-
- Example OPTIONS request:
-
- OPTIONS sip:carol@chicago.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKhjhs8ass877
- Max-Forwards: 70
- To: <sip:carol@chicago.com>
- From: Alice <sip:alice@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710
- CSeq: 63104 OPTIONS
- Contact: <sip:alice@pc33.atlanta.com>
- Accept: application/sdp
- Content-Length: 0
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 67]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-11.2 Processing of OPTIONS Request
-
- The response to an OPTIONS is constructed using the standard rules
- for a SIP response as discussed in Section 8.2.6. The response code
- chosen MUST be the same that would have been chosen had the request
- been an INVITE. That is, a 200 (OK) would be returned if the UAS is
- ready to accept a call, a 486 (Busy Here) would be returned if the
- UAS is busy, etc. This allows an OPTIONS request to be used to
- determine the basic state of a UAS, which can be an indication of
- whether the UAS will accept an INVITE request.
-
- An OPTIONS request received within a dialog generates a 200 (OK)
- response that is identical to one constructed outside a dialog and
- does not have any impact on the dialog.
-
- This use of OPTIONS has limitations due to the differences in proxy
- handling of OPTIONS and INVITE requests. While a forked INVITE can
- result in multiple 200 (OK) responses being returned, a forked
- OPTIONS will only result in a single 200 (OK) response, since it is
- treated by proxies using the non-INVITE handling. See Section 16.7
- for the normative details.
-
- If the response to an OPTIONS is generated by a proxy server, the
- proxy returns a 200 (OK), listing the capabilities of the server.
- The response does not contain a message body.
-
- Allow, Accept, Accept-Encoding, Accept-Language, and Supported header
- fields SHOULD be present in a 200 (OK) response to an OPTIONS
- request. If the response is generated by a proxy, the Allow header
- field SHOULD be omitted as it is ambiguous since a proxy is method
- agnostic. Contact header fields MAY be present in a 200 (OK)
- response and have the same semantics as in a 3xx response. That is,
- they may list a set of alternative names and methods of reaching the
- user. A Warning header field MAY be present.
-
- A message body MAY be sent, the type of which is determined by the
- Accept header field in the OPTIONS request (application/sdp is the
- default if the Accept header field is not present). If the types
- include one that can describe media capabilities, the UAS SHOULD
- include a body in the response for that purpose. Details on the
- construction of such a body in the case of application/sdp are
- described in [13].
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 68]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Example OPTIONS response generated by a UAS (corresponding to the
- request in Section 11.1):
-
- SIP/2.0 200 OK
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKhjhs8ass877
- ;received=192.0.2.4
- To: <sip:carol@chicago.com>;tag=93810874
- From: Alice <sip:alice@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710
- CSeq: 63104 OPTIONS
- Contact: <sip:carol@chicago.com>
- Contact: <mailto:carol@chicago.com>
- Allow: INVITE, ACK, CANCEL, OPTIONS, BYE
- Accept: application/sdp
- Accept-Encoding: gzip
- Accept-Language: en
- Supported: foo
- Content-Type: application/sdp
- Content-Length: 274
-
- (SDP not shown)
-
-12 Dialogs
-
- A key concept for a user agent is that of a dialog. A dialog
- represents a peer-to-peer SIP relationship between two user agents
- that persists for some time. The dialog facilitates sequencing of
- messages between the user agents and proper routing of requests
- between both of them. The dialog represents a context in which to
- interpret SIP messages. Section 8 discussed method independent UA
- processing for requests and responses outside of a dialog. This
- section discusses how those requests and responses are used to
- construct a dialog, and then how subsequent requests and responses
- are sent within a dialog.
-
- A dialog is identified at each UA with a dialog ID, which consists of
- a Call-ID value, a local tag and a remote tag. The dialog ID at each
- UA involved in the dialog is not the same. Specifically, the local
- tag at one UA is identical to the remote tag at the peer UA. The
- tags are opaque tokens that facilitate the generation of unique
- dialog IDs.
-
- A dialog ID is also associated with all responses and with any
- request that contains a tag in the To field. The rules for computing
- the dialog ID of a message depend on whether the SIP element is a UAC
- or UAS. For a UAC, the Call-ID value of the dialog ID is set to the
- Call-ID of the message, the remote tag is set to the tag in the To
- field of the message, and the local tag is set to the tag in the From
-
-
-
-Rosenberg, et. al. Standards Track [Page 69]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- field of the message (these rules apply to both requests and
- responses). As one would expect for a UAS, the Call-ID value of the
- dialog ID is set to the Call-ID of the message, the remote tag is set
- to the tag in the From field of the message, and the local tag is set
- to the tag in the To field of the message.
-
- A dialog contains certain pieces of state needed for further message
- transmissions within the dialog. This state consists of the dialog
- ID, a local sequence number (used to order requests from the UA to
- its peer), a remote sequence number (used to order requests from its
- peer to the UA), a local URI, a remote URI, remote target, a boolean
- flag called "secure", and a route set, which is an ordered list of
- URIs. The route set is the list of servers that need to be traversed
- to send a request to the peer. A dialog can also be in the "early"
- state, which occurs when it is created with a provisional response,
- and then transition to the "confirmed" state when a 2xx final
- response arrives. For other responses, or if no response arrives at
- all on that dialog, the early dialog terminates.
-
-12.1 Creation of a Dialog
-
- Dialogs are created through the generation of non-failure responses
- to requests with specific methods. Within this specification, only
- 2xx and 101-199 responses with a To tag, where the request was
- INVITE, will establish a dialog. A dialog established by a non-final
- response to a request is in the "early" state and it is called an
- early dialog. Extensions MAY define other means for creating
- dialogs. Section 13 gives more details that are specific to the
- INVITE method. Here, we describe the process for creation of dialog
- state that is not dependent on the method.
-
- UAs MUST assign values to the dialog ID components as described
- below.
-
-12.1.1 UAS behavior
-
- When a UAS responds to a request with a response that establishes a
- dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route
- header field values from the request into the response (including the
- URIs, URI parameters, and any Record-Route header field parameters,
- whether they are known or unknown to the UAS) and MUST maintain the
- order of those values. The UAS MUST add a Contact header field to
- the response. The Contact header field contains an address where the
- UAS would like to be contacted for subsequent requests in the dialog
- (which includes the ACK for a 2xx response in the case of an INVITE).
- Generally, the host portion of this URI is the IP address or FQDN of
- the host. The URI provided in the Contact header field MUST be a SIP
- or SIPS URI. If the request that initiated the dialog contained a
-
-
-
-Rosenberg, et. al. Standards Track [Page 70]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- SIPS URI in the Request-URI or in the top Record-Route header field
- value, if there was any, or the Contact header field if there was no
- Record-Route header field, the Contact header field in the response
- MUST be a SIPS URI. The URI SHOULD have global scope (that is, the
- same URI can be used in messages outside this dialog). The same way,
- the scope of the URI in the Contact header field of the INVITE is not
- limited to this dialog either. It can therefore be used in messages
- to the UAC even outside this dialog.
-
- The UAS then constructs the state of the dialog. This state MUST be
- maintained for the duration of the dialog.
-
- If the request arrived over TLS, and the Request-URI contained a SIPS
- URI, the "secure" flag is set to TRUE.
-
- The route set MUST be set to the list of URIs in the Record-Route
- header field from the request, taken in order and preserving all URI
- parameters. If no Record-Route header field is present in the
- request, the route set MUST be set to the empty set. This route set,
- even if empty, overrides any pre-existing route set for future
- requests in this dialog. The remote target MUST be set to the URI
- from the Contact header field of the request.
-
- The remote sequence number MUST be set to the value of the sequence
- number in the CSeq header field of the request. The local sequence
- number MUST be empty. The call identifier component of the dialog ID
- MUST be set to the value of the Call-ID in the request. The local
- tag component of the dialog ID MUST be set to the tag in the To field
- in the response to the request (which always includes a tag), and the
- remote tag component of the dialog ID MUST be set to the tag from the
- From field in the request. A UAS MUST be prepared to receive a
- request without a tag in the From field, in which case the tag is
- considered to have a value of null.
-
- This is to maintain backwards compatibility with RFC 2543, which
- did not mandate From tags.
-
- The remote URI MUST be set to the URI in the From field, and the
- local URI MUST be set to the URI in the To field.
-
-12.1.2 UAC Behavior
-
- When a UAC sends a request that can establish a dialog (such as an
- INVITE) it MUST provide a SIP or SIPS URI with global scope (i.e.,
- the same SIP URI can be used in messages outside this dialog) in the
- Contact header field of the request. If the request has a Request-
- URI or a topmost Route header field value with a SIPS URI, the
- Contact header field MUST contain a SIPS URI.
-
-
-
-Rosenberg, et. al. Standards Track [Page 71]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- When a UAC receives a response that establishes a dialog, it
- constructs the state of the dialog. This state MUST be maintained
- for the duration of the dialog.
-
- If the request was sent over TLS, and the Request-URI contained a
- SIPS URI, the "secure" flag is set to TRUE.
-
- The route set MUST be set to the list of URIs in the Record-Route
- header field from the response, taken in reverse order and preserving
- all URI parameters. If no Record-Route header field is present in
- the response, the route set MUST be set to the empty set. This route
- set, even if empty, overrides any pre-existing route set for future
- requests in this dialog. The remote target MUST be set to the URI
- from the Contact header field of the response.
-
- The local sequence number MUST be set to the value of the sequence
- number in the CSeq header field of the request. The remote sequence
- number MUST be empty (it is established when the remote UA sends a
- request within the dialog). The call identifier component of the
- dialog ID MUST be set to the value of the Call-ID in the request.
- The local tag component of the dialog ID MUST be set to the tag in
- the From field in the request, and the remote tag component of the
- dialog ID MUST be set to the tag in the To field of the response. A
- UAC MUST be prepared to receive a response without a tag in the To
- field, in which case the tag is considered to have a value of null.
-
- This is to maintain backwards compatibility with RFC 2543, which
- did not mandate To tags.
-
- The remote URI MUST be set to the URI in the To field, and the local
- URI MUST be set to the URI in the From field.
-
-12.2 Requests within a Dialog
-
- Once a dialog has been established between two UAs, either of them
- MAY initiate new transactions as needed within the dialog. The UA
- sending the request will take the UAC role for the transaction. The
- UA receiving the request will take the UAS role. Note that these may
- be different roles than the UAs held during the transaction that
- established the dialog.
-
- Requests within a dialog MAY contain Record-Route and Contact header
- fields. However, these requests do not cause the dialog's route set
- to be modified, although they may modify the remote target URI.
- Specifically, requests that are not target refresh requests do not
- modify the dialog's remote target URI, and requests that are target
- refresh requests do. For dialogs that have been established with an
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 72]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- INVITE, the only target refresh request defined is re-INVITE (see
- Section 14). Other extensions may define different target refresh
- requests for dialogs established in other ways.
-
- Note that an ACK is NOT a target refresh request.
-
- Target refresh requests only update the dialog's remote target URI,
- and not the route set formed from the Record-Route. Updating the
- latter would introduce severe backwards compatibility problems with
- RFC 2543-compliant systems.
-
-12.2.1 UAC Behavior
-
-12.2.1.1 Generating the Request
-
- A request within a dialog is constructed by using many of the
- components of the state stored as part of the dialog.
-
- The URI in the To field of the request MUST be set to the remote URI
- from the dialog state. The tag in the To header field of the request
- MUST be set to the remote tag of the dialog ID. The From URI of the
- request MUST be set to the local URI from the dialog state. The tag
- in the From header field of the request MUST be set to the local tag
- of the dialog ID. If the value of the remote or local tags is null,
- the tag parameter MUST be omitted from the To or From header fields,
- respectively.
-
- Usage of the URI from the To and From fields in the original
- request within subsequent requests is done for backwards
- compatibility with RFC 2543, which used the URI for dialog
- identification. In this specification, only the tags are used for
- dialog identification. It is expected that mandatory reflection
- of the original To and From URI in mid-dialog requests will be
- deprecated in a subsequent revision of this specification.
-
- The Call-ID of the request MUST be set to the Call-ID of the dialog.
- Requests within a dialog MUST contain strictly monotonically
- increasing and contiguous CSeq sequence numbers (increasing-by-one)
- in each direction (excepting ACK and CANCEL of course, whose numbers
- equal the requests being acknowledged or cancelled). Therefore, if
- the local sequence number is not empty, the value of the local
- sequence number MUST be incremented by one, and this value MUST be
- placed into the CSeq header field. If the local sequence number is
- empty, an initial value MUST be chosen using the guidelines of
- Section 8.1.1.5. The method field in the CSeq header field value
- MUST match the method of the request.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 73]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- With a length of 32 bits, a client could generate, within a single
- call, one request a second for about 136 years before needing to
- wrap around. The initial value of the sequence number is chosen
- so that subsequent requests within the same call will not wrap
- around. A non-zero initial value allows clients to use a time-
- based initial sequence number. A client could, for example,
- choose the 31 most significant bits of a 32-bit second clock as an
- initial sequence number.
-
- The UAC uses the remote target and route set to build the Request-URI
- and Route header field of the request.
-
- If the route set is empty, the UAC MUST place the remote target URI
- into the Request-URI. The UAC MUST NOT add a Route header field to
- the request.
-
- If the route set is not empty, and the first URI in the route set
- contains the lr parameter (see Section 19.1.1), the UAC MUST place
- the remote target URI into the Request-URI and MUST include a Route
- header field containing the route set values in order, including all
- parameters.
-
- If the route set is not empty, and its first URI does not contain the
- lr parameter, the UAC MUST place the first URI from the route set
- into the Request-URI, stripping any parameters that are not allowed
- in a Request-URI. The UAC MUST add a Route header field containing
- the remainder of the route set values in order, including all
- parameters. The UAC MUST then place the remote target URI into the
- Route header field as the last value.
-
- For example, if the remote target is sip:user@remoteua and the route
- set contains:
-
- <sip:proxy1>,<sip:proxy2>,<sip:proxy3;lr>,<sip:proxy4>
-
- The request will be formed with the following Request-URI and Route
- header field:
-
- METHOD sip:proxy1
- Route: <sip:proxy2>,<sip:proxy3;lr>,<sip:proxy4>,<sip:user@remoteua>
-
- If the first URI of the route set does not contain the lr
- parameter, the proxy indicated does not understand the routing
- mechanisms described in this document and will act as specified in
- RFC 2543, replacing the Request-URI with the first Route header
- field value it receives while forwarding the message. Placing the
- Request-URI at the end of the Route header field preserves the
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 74]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- information in that Request-URI across the strict router (it will
- be returned to the Request-URI when the request reaches a loose-
- router).
-
- A UAC SHOULD include a Contact header field in any target refresh
- requests within a dialog, and unless there is a need to change it,
- the URI SHOULD be the same as used in previous requests within the
- dialog. If the "secure" flag is true, that URI MUST be a SIPS URI.
- As discussed in Section 12.2.2, a Contact header field in a target
- refresh request updates the remote target URI. This allows a UA to
- provide a new contact address, should its address change during the
- duration of the dialog.
-
- However, requests that are not target refresh requests do not affect
- the remote target URI for the dialog.
-
- The rest of the request is formed as described in Section 8.1.1.
-
- Once the request has been constructed, the address of the server is
- computed and the request is sent, using the same procedures for
- requests outside of a dialog (Section 8.1.2).
-
- The procedures in Section 8.1.2 will normally result in the
- request being sent to the address indicated by the topmost Route
- header field value or the Request-URI if no Route header field is
- present. Subject to certain restrictions, they allow the request
- to be sent to an alternate address (such as a default outbound
- proxy not represented in the route set).
-
-12.2.1.2 Processing the Responses
-
- The UAC will receive responses to the request from the transaction
- layer. If the client transaction returns a timeout, this is treated
- as a 408 (Request Timeout) response.
-
- The behavior of a UAC that receives a 3xx response for a request sent
- within a dialog is the same as if the request had been sent outside a
- dialog. This behavior is described in Section 8.1.3.4.
-
- Note, however, that when the UAC tries alternative locations, it
- still uses the route set for the dialog to build the Route header
- of the request.
-
- When a UAC receives a 2xx response to a target refresh request, it
- MUST replace the dialog's remote target URI with the URI from the
- Contact header field in that response, if present.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 75]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- If the response for a request within a dialog is a 481
- (Call/Transaction Does Not Exist) or a 408 (Request Timeout), the UAC
- SHOULD terminate the dialog. A UAC SHOULD also terminate a dialog if
- no response at all is received for the request (the client
- transaction would inform the TU about the timeout.)
-
- For INVITE initiated dialogs, terminating the dialog consists of
- sending a BYE.
-
-12.2.2 UAS Behavior
-
- Requests sent within a dialog, as any other requests, are atomic. If
- a particular request is accepted by the UAS, all the state changes
- associated with it are performed. If the request is rejected, none
- of the state changes are performed.
-
- Note that some requests, such as INVITEs, affect several pieces of
- state.
-
- The UAS will receive the request from the transaction layer. If the
- request has a tag in the To header field, the UAS core computes the
- dialog identifier corresponding to the request and compares it with
- existing dialogs. If there is a match, this is a mid-dialog request.
- In that case, the UAS first applies the same processing rules for
- requests outside of a dialog, discussed in Section 8.2.
-
- If the request has a tag in the To header field, but the dialog
- identifier does not match any existing dialogs, the UAS may have
- crashed and restarted, or it may have received a request for a
- different (possibly failed) UAS (the UASs can construct the To tags
- so that a UAS can identify that the tag was for a UAS for which it is
- providing recovery). Another possibility is that the incoming
- request has been simply misrouted. Based on the To tag, the UAS MAY
- either accept or reject the request. Accepting the request for
- acceptable To tags provides robustness, so that dialogs can persist
- even through crashes. UAs wishing to support this capability must
- take into consideration some issues such as choosing monotonically
- increasing CSeq sequence numbers even across reboots, reconstructing
- the route set, and accepting out-of-range RTP timestamps and sequence
- numbers.
-
- If the UAS wishes to reject the request because it does not wish to
- recreate the dialog, it MUST respond to the request with a 481
- (Call/Transaction Does Not Exist) status code and pass that to the
- server transaction.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 76]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Requests that do not change in any way the state of a dialog may be
- received within a dialog (for example, an OPTIONS request). They are
- processed as if they had been received outside the dialog.
-
- If the remote sequence number is empty, it MUST be set to the value
- of the sequence number in the CSeq header field value in the request.
- If the remote sequence number was not empty, but the sequence number
- of the request is lower than the remote sequence number, the request
- is out of order and MUST be rejected with a 500 (Server Internal
- Error) response. If the remote sequence number was not empty, and
- the sequence number of the request is greater than the remote
- sequence number, the request is in order. It is possible for the
- CSeq sequence number to be higher than the remote sequence number by
- more than one. This is not an error condition, and a UAS SHOULD be
- prepared to receive and process requests with CSeq values more than
- one higher than the previous received request. The UAS MUST then set
- the remote sequence number to the value of the sequence number in the
- CSeq header field value in the request.
-
- If a proxy challenges a request generated by the UAC, the UAC has
- to resubmit the request with credentials. The resubmitted request
- will have a new CSeq number. The UAS will never see the first
- request, and thus, it will notice a gap in the CSeq number space.
- Such a gap does not represent any error condition.
-
- When a UAS receives a target refresh request, it MUST replace the
- dialog's remote target URI with the URI from the Contact header field
- in that request, if present.
-
-12.3 Termination of a Dialog
-
- Independent of the method, if a request outside of a dialog generates
- a non-2xx final response, any early dialogs created through
- provisional responses to that request are terminated. The mechanism
- for terminating confirmed dialogs is method specific. In this
- specification, the BYE method terminates a session and the dialog
- associated with it. See Section 15 for details.
-
-13 Initiating a Session
-
-13.1 Overview
-
- When a user agent client desires to initiate a session (for example,
- audio, video, or a game), it formulates an INVITE request. The
- INVITE request asks a server to establish a session. This request
- may be forwarded by proxies, eventually arriving at one or more UAS
- that can potentially accept the invitation. These UASs will
- frequently need to query the user about whether to accept the
-
-
-
-Rosenberg, et. al. Standards Track [Page 77]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- invitation. After some time, those UASs can accept the invitation
- (meaning the session is to be established) by sending a 2xx response.
- If the invitation is not accepted, a 3xx, 4xx, 5xx or 6xx response is
- sent, depending on the reason for the rejection. Before sending a
- final response, the UAS can also send provisional responses (1xx) to
- advise the UAC of progress in contacting the called user.
-
- After possibly receiving one or more provisional responses, the UAC
- will get one or more 2xx responses or one non-2xx final response.
- Because of the protracted amount of time it can take to receive final
- responses to INVITE, the reliability mechanisms for INVITE
- transactions differ from those of other requests (like OPTIONS).
- Once it receives a final response, the UAC needs to send an ACK for
- every final response it receives. The procedure for sending this ACK
- depends on the type of response. For final responses between 300 and
- 699, the ACK processing is done in the transaction layer and follows
- one set of rules (See Section 17). For 2xx responses, the ACK is
- generated by the UAC core.
-
- A 2xx response to an INVITE establishes a session, and it also
- creates a dialog between the UA that issued the INVITE and the UA
- that generated the 2xx response. Therefore, when multiple 2xx
- responses are received from different remote UAs (because the INVITE
- forked), each 2xx establishes a different dialog. All these dialogs
- are part of the same call.
-
- This section provides details on the establishment of a session using
- INVITE. A UA that supports INVITE MUST also support ACK, CANCEL and
- BYE.
-
-13.2 UAC Processing
-
-13.2.1 Creating the Initial INVITE
-
- Since the initial INVITE represents a request outside of a dialog,
- its construction follows the procedures of Section 8.1.1. Additional
- processing is required for the specific case of INVITE.
-
- An Allow header field (Section 20.5) SHOULD be present in the INVITE.
- It indicates what methods can be invoked within a dialog, on the UA
- sending the INVITE, for the duration of the dialog. For example, a
- UA capable of receiving INFO requests within a dialog [34] SHOULD
- include an Allow header field listing the INFO method.
-
- A Supported header field (Section 20.37) SHOULD be present in the
- INVITE. It enumerates all the extensions understood by the UAC.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 78]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- An Accept (Section 20.1) header field MAY be present in the INVITE.
- It indicates which Content-Types are acceptable to the UA, in both
- the response received by it, and in any subsequent requests sent to
- it within dialogs established by the INVITE. The Accept header field
- is especially useful for indicating support of various session
- description formats.
-
- The UAC MAY add an Expires header field (Section 20.19) to limit the
- validity of the invitation. If the time indicated in the Expires
- header field is reached and no final answer for the INVITE has been
- received, the UAC core SHOULD generate a CANCEL request for the
- INVITE, as per Section 9.
-
- A UAC MAY also find it useful to add, among others, Subject (Section
- 20.36), Organization (Section 20.25) and User-Agent (Section 20.41)
- header fields. They all contain information related to the INVITE.
-
- The UAC MAY choose to add a message body to the INVITE. Section
- 8.1.1.10 deals with how to construct the header fields -- Content-
- Type among others -- needed to describe the message body.
-
- There are special rules for message bodies that contain a session
- description - their corresponding Content-Disposition is "session".
- SIP uses an offer/answer model where one UA sends a session
- description, called the offer, which contains a proposed description
- of the session. The offer indicates the desired communications means
- (audio, video, games), parameters of those means (such as codec
- types) and addresses for receiving media from the answerer. The
- other UA responds with another session description, called the
- answer, which indicates which communications means are accepted, the
- parameters that apply to those means, and addresses for receiving
- media from the offerer. An offer/answer exchange is within the
- context of a dialog, so that if a SIP INVITE results in multiple
- dialogs, each is a separate offer/answer exchange. The offer/answer
- model defines restrictions on when offers and answers can be made
- (for example, you cannot make a new offer while one is in progress).
- This results in restrictions on where the offers and answers can
- appear in SIP messages. In this specification, offers and answers
- can only appear in INVITE requests and responses, and ACK. The usage
- of offers and answers is further restricted. For the initial INVITE
- transaction, the rules are:
-
- o The initial offer MUST be in either an INVITE or, if not there,
- in the first reliable non-failure message from the UAS back to
- the UAC. In this specification, that is the final 2xx
- response.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 79]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o If the initial offer is in an INVITE, the answer MUST be in a
- reliable non-failure message from UAS back to UAC which is
- correlated to that INVITE. For this specification, that is
- only the final 2xx response to that INVITE. That same exact
- answer MAY also be placed in any provisional responses sent
- prior to the answer. The UAC MUST treat the first session
- description it receives as the answer, and MUST ignore any
- session descriptions in subsequent responses to the initial
- INVITE.
-
- o If the initial offer is in the first reliable non-failure
- message from the UAS back to UAC, the answer MUST be in the
- acknowledgement for that message (in this specification, ACK
- for a 2xx response).
-
- o After having sent or received an answer to the first offer, the
- UAC MAY generate subsequent offers in requests based on rules
- specified for that method, but only if it has received answers
- to any previous offers, and has not sent any offers to which it
- hasn't gotten an answer.
-
- o Once the UAS has sent or received an answer to the initial
- offer, it MUST NOT generate subsequent offers in any responses
- to the initial INVITE. This means that a UAS based on this
- specification alone can never generate subsequent offers until
- completion of the initial transaction.
-
- Concretely, the above rules specify two exchanges for UAs compliant
- to this specification alone - the offer is in the INVITE, and the
- answer in the 2xx (and possibly in a 1xx as well, with the same
- value), or the offer is in the 2xx, and the answer is in the ACK.
- All user agents that support INVITE MUST support these two exchanges.
-
- The Session Description Protocol (SDP) (RFC 2327 [1]) MUST be
- supported by all user agents as a means to describe sessions, and its
- usage for constructing offers and answers MUST follow the procedures
- defined in [13].
-
- The restrictions of the offer-answer model just described only apply
- to bodies whose Content-Disposition header field value is "session".
- Therefore, it is possible that both the INVITE and the ACK contain a
- body message (for example, the INVITE carries a photo (Content-
- Disposition: render) and the ACK a session description (Content-
- Disposition: session)).
-
- If the Content-Disposition header field is missing, bodies of
- Content-Type application/sdp imply the disposition "session", while
- other content types imply "render".
-
-
-
-Rosenberg, et. al. Standards Track [Page 80]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Once the INVITE has been created, the UAC follows the procedures
- defined for sending requests outside of a dialog (Section 8). This
- results in the construction of a client transaction that will
- ultimately send the request and deliver responses to the UAC.
-
-13.2.2 Processing INVITE Responses
-
- Once the INVITE has been passed to the INVITE client transaction, the
- UAC waits for responses for the INVITE. If the INVITE client
- transaction returns a timeout rather than a response the TU acts as
- if a 408 (Request Timeout) response had been received, as described
- in Section 8.1.3.
-
-13.2.2.1 1xx Responses
-
- Zero, one or multiple provisional responses may arrive before one or
- more final responses are received. Provisional responses for an
- INVITE request can create "early dialogs". If a provisional response
- has a tag in the To field, and if the dialog ID of the response does
- not match an existing dialog, one is constructed using the procedures
- defined in Section 12.1.2.
-
- The early dialog will only be needed if the UAC needs to send a
- request to its peer within the dialog before the initial INVITE
- transaction completes. Header fields present in a provisional
- response are applicable as long as the dialog is in the early state
- (for example, an Allow header field in a provisional response
- contains the methods that can be used in the dialog while this is in
- the early state).
-
-13.2.2.2 3xx Responses
-
- A 3xx response may contain one or more Contact header field values
- providing new addresses where the callee might be reachable.
- Depending on the status code of the 3xx response (see Section 21.3),
- the UAC MAY choose to try those new addresses.
-
-13.2.2.3 4xx, 5xx and 6xx Responses
-
- A single non-2xx final response may be received for the INVITE. 4xx,
- 5xx and 6xx responses may contain a Contact header field value
- indicating the location where additional information about the error
- can be found. Subsequent final responses (which would only arrive
- under error conditions) MUST be ignored.
-
- All early dialogs are considered terminated upon reception of the
- non-2xx final response.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 81]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- After having received the non-2xx final response the UAC core
- considers the INVITE transaction completed. The INVITE client
- transaction handles the generation of ACKs for the response (see
- Section 17).
-
-13.2.2.4 2xx Responses
-
- Multiple 2xx responses may arrive at the UAC for a single INVITE
- request due to a forking proxy. Each response is distinguished by
- the tag parameter in the To header field, and each represents a
- distinct dialog, with a distinct dialog identifier.
-
- If the dialog identifier in the 2xx response matches the dialog
- identifier of an existing dialog, the dialog MUST be transitioned to
- the "confirmed" state, and the route set for the dialog MUST be
- recomputed based on the 2xx response using the procedures of Section
- 12.2.1.2. Otherwise, a new dialog in the "confirmed" state MUST be
- constructed using the procedures of Section 12.1.2.
-
- Note that the only piece of state that is recomputed is the route
- set. Other pieces of state such as the highest sequence numbers
- (remote and local) sent within the dialog are not recomputed. The
- route set only is recomputed for backwards compatibility. RFC
- 2543 did not mandate mirroring of the Record-Route header field in
- a 1xx, only 2xx. However, we cannot update the entire state of
- the dialog, since mid-dialog requests may have been sent within
- the early dialog, modifying the sequence numbers, for example.
-
- The UAC core MUST generate an ACK request for each 2xx received from
- the transaction layer. The header fields of the ACK are constructed
- in the same way as for any request sent within a dialog (see Section
- 12) with the exception of the CSeq and the header fields related to
- authentication. The sequence number of the CSeq header field MUST be
- the same as the INVITE being acknowledged, but the CSeq method MUST
- be ACK. The ACK MUST contain the same credentials as the INVITE. If
- the 2xx contains an offer (based on the rules above), the ACK MUST
- carry an answer in its body. If the offer in the 2xx response is not
- acceptable, the UAC core MUST generate a valid answer in the ACK and
- then send a BYE immediately.
-
- Once the ACK has been constructed, the procedures of [4] are used to
- determine the destination address, port and transport. However, the
- request is passed to the transport layer directly for transmission,
- rather than a client transaction. This is because the UAC core
- handles retransmissions of the ACK, not the transaction layer. The
- ACK MUST be passed to the client transport every time a
- retransmission of the 2xx final response that triggered the ACK
- arrives.
-
-
-
-Rosenberg, et. al. Standards Track [Page 82]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The UAC core considers the INVITE transaction completed 64*T1 seconds
- after the reception of the first 2xx response. At this point all the
- early dialogs that have not transitioned to established dialogs are
- terminated. Once the INVITE transaction is considered completed by
- the UAC core, no more new 2xx responses are expected to arrive.
-
- If, after acknowledging any 2xx response to an INVITE, the UAC does
- not want to continue with that dialog, then the UAC MUST terminate
- the dialog by sending a BYE request as described in Section 15.
-
-13.3 UAS Processing
-
-13.3.1 Processing of the INVITE
-
- The UAS core will receive INVITE requests from the transaction layer.
- It first performs the request processing procedures of Section 8.2,
- which are applied for both requests inside and outside of a dialog.
-
- Assuming these processing states are completed without generating a
- response, the UAS core performs the additional processing steps:
-
- 1. If the request is an INVITE that contains an Expires header
- field, the UAS core sets a timer for the number of seconds
- indicated in the header field value. When the timer fires, the
- invitation is considered to be expired. If the invitation
- expires before the UAS has generated a final response, a 487
- (Request Terminated) response SHOULD be generated.
-
- 2. If the request is a mid-dialog request, the method-independent
- processing described in Section 12.2.2 is first applied. It
- might also modify the session; Section 14 provides details.
-
- 3. If the request has a tag in the To header field but the dialog
- identifier does not match any of the existing dialogs, the UAS
- may have crashed and restarted, or may have received a request
- for a different (possibly failed) UAS. Section 12.2.2 provides
- guidelines to achieve a robust behavior under such a situation.
-
- Processing from here forward assumes that the INVITE is outside of a
- dialog, and is thus for the purposes of establishing a new session.
-
- The INVITE may contain a session description, in which case the UAS
- is being presented with an offer for that session. It is possible
- that the user is already a participant in that session, even though
- the INVITE is outside of a dialog. This can happen when a user is
- invited to the same multicast conference by multiple other
- participants. If desired, the UAS MAY use identifiers within the
- session description to detect this duplication. For example, SDP
-
-
-
-Rosenberg, et. al. Standards Track [Page 83]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- contains a session id and version number in the origin (o) field. If
- the user is already a member of the session, and the session
- parameters contained in the session description have not changed, the
- UAS MAY silently accept the INVITE (that is, send a 2xx response
- without prompting the user).
-
- If the INVITE does not contain a session description, the UAS is
- being asked to participate in a session, and the UAC has asked that
- the UAS provide the offer of the session. It MUST provide the offer
- in its first non-failure reliable message back to the UAC. In this
- specification, that is a 2xx response to the INVITE.
-
- The UAS can indicate progress, accept, redirect, or reject the
- invitation. In all of these cases, it formulates a response using
- the procedures described in Section 8.2.6.
-
-13.3.1.1 Progress
-
- If the UAS is not able to answer the invitation immediately, it can
- choose to indicate some kind of progress to the UAC (for example, an
- indication that a phone is ringing). This is accomplished with a
- provisional response between 101 and 199. These provisional
- responses establish early dialogs and therefore follow the procedures
- of Section 12.1.1 in addition to those of Section 8.2.6. A UAS MAY
- send as many provisional responses as it likes. Each of these MUST
- indicate the same dialog ID. However, these will not be delivered
- reliably.
-
- If the UAS desires an extended period of time to answer the INVITE,
- it will need to ask for an "extension" in order to prevent proxies
- from canceling the transaction. A proxy has the option of canceling
- a transaction when there is a gap of 3 minutes between responses in a
- transaction. To prevent cancellation, the UAS MUST send a non-100
- provisional response at every minute, to handle the possibility of
- lost provisional responses.
-
- An INVITE transaction can go on for extended durations when the
- user is placed on hold, or when interworking with PSTN systems
- which allow communications to take place without answering the
- call. The latter is common in Interactive Voice Response (IVR)
- systems.
-
-13.3.1.2 The INVITE is Redirected
-
- If the UAS decides to redirect the call, a 3xx response is sent. A
- 300 (Multiple Choices), 301 (Moved Permanently) or 302 (Moved
- Temporarily) response SHOULD contain a Contact header field
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 84]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- containing one or more URIs of new addresses to be tried. The
- response is passed to the INVITE server transaction, which will deal
- with its retransmissions.
-
-13.3.1.3 The INVITE is Rejected
-
- A common scenario occurs when the callee is currently not willing or
- able to take additional calls at this end system. A 486 (Busy Here)
- SHOULD be returned in such a scenario. If the UAS knows that no
- other end system will be able to accept this call, a 600 (Busy
- Everywhere) response SHOULD be sent instead. However, it is unlikely
- that a UAS will be able to know this in general, and thus this
- response will not usually be used. The response is passed to the
- INVITE server transaction, which will deal with its retransmissions.
-
- A UAS rejecting an offer contained in an INVITE SHOULD return a 488
- (Not Acceptable Here) response. Such a response SHOULD include a
- Warning header field value explaining why the offer was rejected.
-
-13.3.1.4 The INVITE is Accepted
-
- The UAS core generates a 2xx response. This response establishes a
- dialog, and therefore follows the procedures of Section 12.1.1 in
- addition to those of Section 8.2.6.
-
- A 2xx response to an INVITE SHOULD contain the Allow header field and
- the Supported header field, and MAY contain the Accept header field.
- Including these header fields allows the UAC to determine the
- features and extensions supported by the UAS for the duration of the
- call, without probing.
-
- If the INVITE request contained an offer, and the UAS had not yet
- sent an answer, the 2xx MUST contain an answer. If the INVITE did
- not contain an offer, the 2xx MUST contain an offer if the UAS had
- not yet sent an offer.
-
- Once the response has been constructed, it is passed to the INVITE
- server transaction. Note, however, that the INVITE server
- transaction will be destroyed as soon as it receives this final
- response and passes it to the transport. Therefore, it is necessary
- to periodically pass the response directly to the transport until the
- ACK arrives. The 2xx response is passed to the transport with an
- interval that starts at T1 seconds and doubles for each
- retransmission until it reaches T2 seconds (T1 and T2 are defined in
- Section 17). Response retransmissions cease when an ACK request for
- the response is received. This is independent of whatever transport
- protocols are used to send the response.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 85]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Since 2xx is retransmitted end-to-end, there may be hops between
- UAS and UAC that are UDP. To ensure reliable delivery across
- these hops, the response is retransmitted periodically even if the
- transport at the UAS is reliable.
-
- If the server retransmits the 2xx response for 64*T1 seconds without
- receiving an ACK, the dialog is confirmed, but the session SHOULD be
- terminated. This is accomplished with a BYE, as described in Section
- 15.
-
-14 Modifying an Existing Session
-
- A successful INVITE request (see Section 13) establishes both a
- dialog between two user agents and a session using the offer-answer
- model. Section 12 explains how to modify an existing dialog using a
- target refresh request (for example, changing the remote target URI
- of the dialog). This section describes how to modify the actual
- session. This modification can involve changing addresses or ports,
- adding a media stream, deleting a media stream, and so on. This is
- accomplished by sending a new INVITE request within the same dialog
- that established the session. An INVITE request sent within an
- existing dialog is known as a re-INVITE.
-
- Note that a single re-INVITE can modify the dialog and the
- parameters of the session at the same time.
-
- Either the caller or callee can modify an existing session.
-
- The behavior of a UA on detection of media failure is a matter of
- local policy. However, automated generation of re-INVITE or BYE is
- NOT RECOMMENDED to avoid flooding the network with traffic when there
- is congestion. In any case, if these messages are sent
- automatically, they SHOULD be sent after some randomized interval.
-
- Note that the paragraph above refers to automatically generated
- BYEs and re-INVITEs. If the user hangs up upon media failure, the
- UA would send a BYE request as usual.
-
-14.1 UAC Behavior
-
- The same offer-answer model that applies to session descriptions in
- INVITEs (Section 13.2.1) applies to re-INVITEs. As a result, a UAC
- that wants to add a media stream, for example, will create a new
- offer that contains this media stream, and send that in an INVITE
- request to its peer. It is important to note that the full
- description of the session, not just the change, is sent. This
- supports stateless session processing in various elements, and
- supports failover and recovery capabilities. Of course, a UAC MAY
-
-
-
-Rosenberg, et. al. Standards Track [Page 86]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- send a re-INVITE with no session description, in which case the first
- reliable non-failure response to the re-INVITE will contain the offer
- (in this specification, that is a 2xx response).
-
- If the session description format has the capability for version
- numbers, the offerer SHOULD indicate that the version of the session
- description has changed.
-
- The To, From, Call-ID, CSeq, and Request-URI of a re-INVITE are set
- following the same rules as for regular requests within an existing
- dialog, described in Section 12.
-
- A UAC MAY choose not to add an Alert-Info header field or a body with
- Content-Disposition "alert" to re-INVITEs because UASs do not
- typically alert the user upon reception of a re-INVITE.
-
- Unlike an INVITE, which can fork, a re-INVITE will never fork, and
- therefore, only ever generate a single final response. The reason a
- re-INVITE will never fork is that the Request-URI identifies the
- target as the UA instance it established the dialog with, rather than
- identifying an address-of-record for the user.
-
- Note that a UAC MUST NOT initiate a new INVITE transaction within a
- dialog while another INVITE transaction is in progress in either
- direction.
-
- 1. If there is an ongoing INVITE client transaction, the TU MUST
- wait until the transaction reaches the completed or terminated
- state before initiating the new INVITE.
-
- 2. If there is an ongoing INVITE server transaction, the TU MUST
- wait until the transaction reaches the confirmed or terminated
- state before initiating the new INVITE.
-
- However, a UA MAY initiate a regular transaction while an INVITE
- transaction is in progress. A UA MAY also initiate an INVITE
- transaction while a regular transaction is in progress.
-
- If a UA receives a non-2xx final response to a re-INVITE, the session
- parameters MUST remain unchanged, as if no re-INVITE had been issued.
- Note that, as stated in Section 12.2.1.2, if the non-2xx final
- response is a 481 (Call/Transaction Does Not Exist), or a 408
- (Request Timeout), or no response at all is received for the re-
- INVITE (that is, a timeout is returned by the INVITE client
- transaction), the UAC will terminate the dialog.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 87]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- If a UAC receives a 491 response to a re-INVITE, it SHOULD start a
- timer with a value T chosen as follows:
-
- 1. If the UAC is the owner of the Call-ID of the dialog ID
- (meaning it generated the value), T has a randomly chosen value
- between 2.1 and 4 seconds in units of 10 ms.
-
- 2. If the UAC is not the owner of the Call-ID of the dialog ID, T
- has a randomly chosen value of between 0 and 2 seconds in units
- of 10 ms.
-
- When the timer fires, the UAC SHOULD attempt the re-INVITE once more,
- if it still desires for that session modification to take place. For
- example, if the call was already hung up with a BYE, the re-INVITE
- would not take place.
-
- The rules for transmitting a re-INVITE and for generating an ACK for
- a 2xx response to re-INVITE are the same as for the initial INVITE
- (Section 13.2.1).
-
-14.2 UAS Behavior
-
- Section 13.3.1 describes the procedure for distinguishing incoming
- re-INVITEs from incoming initial INVITEs and handling a re-INVITE for
- an existing dialog.
-
- A UAS that receives a second INVITE before it sends the final
- response to a first INVITE with a lower CSeq sequence number on the
- same dialog MUST return a 500 (Server Internal Error) response to the
- second INVITE and MUST include a Retry-After header field with a
- randomly chosen value of between 0 and 10 seconds.
-
- A UAS that receives an INVITE on a dialog while an INVITE it had sent
- on that dialog is in progress MUST return a 491 (Request Pending)
- response to the received INVITE.
-
- If a UA receives a re-INVITE for an existing dialog, it MUST check
- any version identifiers in the session description or, if there are
- no version identifiers, the content of the session description to see
- if it has changed. If the session description has changed, the UAS
- MUST adjust the session parameters accordingly, possibly after asking
- the user for confirmation.
-
- Versioning of the session description can be used to accommodate
- the capabilities of new arrivals to a conference, add or delete
- media, or change from a unicast to a multicast conference.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 88]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- If the new session description is not acceptable, the UAS can reject
- it by returning a 488 (Not Acceptable Here) response for the re-
- INVITE. This response SHOULD include a Warning header field.
-
- If a UAS generates a 2xx response and never receives an ACK, it
- SHOULD generate a BYE to terminate the dialog.
-
- A UAS MAY choose not to generate 180 (Ringing) responses for a re-
- INVITE because UACs do not typically render this information to the
- user. For the same reason, UASs MAY choose not to use an Alert-Info
- header field or a body with Content-Disposition "alert" in responses
- to a re-INVITE.
-
- A UAS providing an offer in a 2xx (because the INVITE did not contain
- an offer) SHOULD construct the offer as if the UAS were making a
- brand new call, subject to the constraints of sending an offer that
- updates an existing session, as described in [13] in the case of SDP.
- Specifically, this means that it SHOULD include as many media formats
- and media types that the UA is willing to support. The UAS MUST
- ensure that the session description overlaps with its previous
- session description in media formats, transports, or other parameters
- that require support from the peer. This is to avoid the need for
- the peer to reject the session description. If, however, it is
- unacceptable to the UAC, the UAC SHOULD generate an answer with a
- valid session description, and then send a BYE to terminate the
- session.
-
-15 Terminating a Session
-
- This section describes the procedures for terminating a session
- established by SIP. The state of the session and the state of the
- dialog are very closely related. When a session is initiated with an
- INVITE, each 1xx or 2xx response from a distinct UAS creates a
- dialog, and if that response completes the offer/answer exchange, it
- also creates a session. As a result, each session is "associated"
- with a single dialog - the one which resulted in its creation. If an
- initial INVITE generates a non-2xx final response, that terminates
- all sessions (if any) and all dialogs (if any) that were created
- through responses to the request. By virtue of completing the
- transaction, a non-2xx final response also prevents further sessions
- from being created as a result of the INVITE. The BYE request is
- used to terminate a specific session or attempted session. In this
- case, the specific session is the one with the peer UA on the other
- side of the dialog. When a BYE is received on a dialog, any session
- associated with that dialog SHOULD terminate. A UA MUST NOT send a
- BYE outside of a dialog. The caller's UA MAY send a BYE for either
- confirmed or early dialogs, and the callee's UA MAY send a BYE on
- confirmed dialogs, but MUST NOT send a BYE on early dialogs.
-
-
-
-Rosenberg, et. al. Standards Track [Page 89]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- However, the callee's UA MUST NOT send a BYE on a confirmed dialog
- until it has received an ACK for its 2xx response or until the server
- transaction times out. If no SIP extensions have defined other
- application layer states associated with the dialog, the BYE also
- terminates the dialog.
-
- The impact of a non-2xx final response to INVITE on dialogs and
- sessions makes the use of CANCEL attractive. The CANCEL attempts to
- force a non-2xx response to the INVITE (in particular, a 487).
- Therefore, if a UAC wishes to give up on its call attempt entirely,
- it can send a CANCEL. If the INVITE results in 2xx final response(s)
- to the INVITE, this means that a UAS accepted the invitation while
- the CANCEL was in progress. The UAC MAY continue with the sessions
- established by any 2xx responses, or MAY terminate them with BYE.
-
- The notion of "hanging up" is not well defined within SIP. It is
- specific to a particular, albeit common, user interface.
- Typically, when the user hangs up, it indicates a desire to
- terminate the attempt to establish a session, and to terminate any
- sessions already created. For the caller's UA, this would imply a
- CANCEL request if the initial INVITE has not generated a final
- response, and a BYE to all confirmed dialogs after a final
- response. For the callee's UA, it would typically imply a BYE;
- presumably, when the user picked up the phone, a 2xx was
- generated, and so hanging up would result in a BYE after the ACK
- is received. This does not mean a user cannot hang up before
- receipt of the ACK, it just means that the software in his phone
- needs to maintain state for a short while in order to clean up
- properly. If the particular UI allows for the user to reject a
- call before its answered, a 403 (Forbidden) is a good way to
- express that. As per the rules above, a BYE can't be sent.
-
-15.1 Terminating a Session with a BYE Request
-
-15.1.1 UAC Behavior
-
- A BYE request is constructed as would any other request within a
- dialog, as described in Section 12.
-
- Once the BYE is constructed, the UAC core creates a new non-INVITE
- client transaction, and passes it the BYE request. The UAC MUST
- consider the session terminated (and therefore stop sending or
- listening for media) as soon as the BYE request is passed to the
- client transaction. If the response for the BYE is a 481
- (Call/Transaction Does Not Exist) or a 408 (Request Timeout) or no
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 90]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- response at all is received for the BYE (that is, a timeout is
- returned by the client transaction), the UAC MUST consider the
- session and the dialog terminated.
-
-15.1.2 UAS Behavior
-
- A UAS first processes the BYE request according to the general UAS
- processing described in Section 8.2. A UAS core receiving a BYE
- request checks if it matches an existing dialog. If the BYE does not
- match an existing dialog, the UAS core SHOULD generate a 481
- (Call/Transaction Does Not Exist) response and pass that to the
- server transaction.
-
- This rule means that a BYE sent without tags by a UAC will be
- rejected. This is a change from RFC 2543, which allowed BYE
- without tags.
-
- A UAS core receiving a BYE request for an existing dialog MUST follow
- the procedures of Section 12.2.2 to process the request. Once done,
- the UAS SHOULD terminate the session (and therefore stop sending and
- listening for media). The only case where it can elect not to are
- multicast sessions, where participation is possible even if the other
- participant in the dialog has terminated its involvement in the
- session. Whether or not it ends its participation on the session,
- the UAS core MUST generate a 2xx response to the BYE, and MUST pass
- that to the server transaction for transmission.
-
- The UAS MUST still respond to any pending requests received for that
- dialog. It is RECOMMENDED that a 487 (Request Terminated) response
- be generated to those pending requests.
-
-16 Proxy Behavior
-
-16.1 Overview
-
- SIP proxies are elements that route SIP requests to user agent
- servers and SIP responses to user agent clients. A request may
- traverse several proxies on its way to a UAS. Each will make routing
- decisions, modifying the request before forwarding it to the next
- element. Responses will route through the same set of proxies
- traversed by the request in the reverse order.
-
- Being a proxy is a logical role for a SIP element. When a request
- arrives, an element that can play the role of a proxy first decides
- if it needs to respond to the request on its own. For instance, the
- request may be malformed or the element may need credentials from the
- client before acting as a proxy. The element MAY respond with any
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 91]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- appropriate error code. When responding directly to a request, the
- element is playing the role of a UAS and MUST behave as described in
- Section 8.2.
-
- A proxy can operate in either a stateful or stateless mode for each
- new request. When stateless, a proxy acts as a simple forwarding
- element. It forwards each request downstream to a single element
- determined by making a targeting and routing decision based on the
- request. It simply forwards every response it receives upstream. A
- stateless proxy discards information about a message once the message
- has been forwarded. A stateful proxy remembers information
- (specifically, transaction state) about each incoming request and any
- requests it sends as a result of processing the incoming request. It
- uses this information to affect the processing of future messages
- associated with that request. A stateful proxy MAY choose to "fork"
- a request, routing it to multiple destinations. Any request that is
- forwarded to more than one location MUST be handled statefully.
-
- In some circumstances, a proxy MAY forward requests using stateful
- transports (such as TCP) without being transaction-stateful. For
- instance, a proxy MAY forward a request from one TCP connection to
- another transaction statelessly as long as it places enough
- information in the message to be able to forward the response down
- the same connection the request arrived on. Requests forwarded
- between different types of transports where the proxy's TU must take
- an active role in ensuring reliable delivery on one of the transports
- MUST be forwarded transaction statefully.
-
- A stateful proxy MAY transition to stateless operation at any time
- during the processing of a request, so long as it did not do anything
- that would otherwise prevent it from being stateless initially
- (forking, for example, or generation of a 100 response). When
- performing such a transition, all state is simply discarded. The
- proxy SHOULD NOT initiate a CANCEL request.
-
- Much of the processing involved when acting statelessly or statefully
- for a request is identical. The next several subsections are written
- from the point of view of a stateful proxy. The last section calls
- out those places where a stateless proxy behaves differently.
-
-16.2 Stateful Proxy
-
- When stateful, a proxy is purely a SIP transaction processing engine.
- Its behavior is modeled here in terms of the server and client
- transactions defined in Section 17. A stateful proxy has a server
- transaction associated with one or more client transactions by a
- higher layer proxy processing component (see figure 3), known as a
- proxy core. An incoming request is processed by a server
-
-
-
-Rosenberg, et. al. Standards Track [Page 92]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- transaction. Requests from the server transaction are passed to a
- proxy core. The proxy core determines where to route the request,
- choosing one or more next-hop locations. An outgoing request for
- each next-hop location is processed by its own associated client
- transaction. The proxy core collects the responses from the client
- transactions and uses them to send responses to the server
- transaction.
-
- A stateful proxy creates a new server transaction for each new
- request received. Any retransmissions of the request will then be
- handled by that server transaction per Section 17. The proxy core
- MUST behave as a UAS with respect to sending an immediate provisional
- on that server transaction (such as 100 Trying) as described in
- Section 8.2.6. Thus, a stateful proxy SHOULD NOT generate 100
- (Trying) responses to non-INVITE requests.
-
- This is a model of proxy behavior, not of software. An
- implementation is free to take any approach that replicates the
- external behavior this model defines.
-
- For all new requests, including any with unknown methods, an element
- intending to proxy the request MUST:
-
- 1. Validate the request (Section 16.3)
-
- 2. Preprocess routing information (Section 16.4)
-
- 3. Determine target(s) for the request (Section 16.5)
-
- +--------------------+
- | | +---+
- | | | C |
- | | | T |
- | | +---+
- +---+ | Proxy | +---+ CT = Client Transaction
- | S | | "Higher" Layer | | C |
- | T | | | | T | ST = Server Transaction
- +---+ | | +---+
- | | +---+
- | | | C |
- | | | T |
- | | +---+
- +--------------------+
-
- Figure 3: Stateful Proxy Model
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 93]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 4. Forward the request to each target (Section 16.6)
-
- 5. Process all responses (Section 16.7)
-
-16.3 Request Validation
-
- Before an element can proxy a request, it MUST verify the message's
- validity. A valid message must pass the following checks:
-
- 1. Reasonable Syntax
-
- 2. URI scheme
-
- 3. Max-Forwards
-
- 4. (Optional) Loop Detection
-
- 5. Proxy-Require
-
- 6. Proxy-Authorization
-
- If any of these checks fail, the element MUST behave as a user agent
- server (see Section 8.2) and respond with an error code.
-
- Notice that a proxy is not required to detect merged requests and
- MUST NOT treat merged requests as an error condition. The endpoints
- receiving the requests will resolve the merge as described in Section
- 8.2.2.2.
-
- 1. Reasonable syntax check
-
- The request MUST be well-formed enough to be handled with a server
- transaction. Any components involved in the remainder of these
- Request Validation steps or the Request Forwarding section MUST be
- well-formed. Any other components, well-formed or not, SHOULD be
- ignored and remain unchanged when the message is forwarded. For
- instance, an element would not reject a request because of a
- malformed Date header field. Likewise, a proxy would not remove a
- malformed Date header field before forwarding a request.
-
- This protocol is designed to be extended. Future extensions may
- define new methods and header fields at any time. An element MUST
- NOT refuse to proxy a request because it contains a method or
- header field it does not know about.
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 94]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 2. URI scheme check
-
- If the Request-URI has a URI whose scheme is not understood by the
- proxy, the proxy SHOULD reject the request with a 416 (Unsupported
- URI Scheme) response.
-
- 3. Max-Forwards check
-
- The Max-Forwards header field (Section 20.22) is used to limit the
- number of elements a SIP request can traverse.
-
- If the request does not contain a Max-Forwards header field, this
- check is passed.
-
- If the request contains a Max-Forwards header field with a field
- value greater than zero, the check is passed.
-
- If the request contains a Max-Forwards header field with a field
- value of zero (0), the element MUST NOT forward the request. If
- the request was for OPTIONS, the element MAY act as the final
- recipient and respond per Section 11. Otherwise, the element MUST
- return a 483 (Too many hops) response.
-
- 4. Optional Loop Detection check
-
- An element MAY check for forwarding loops before forwarding a
- request. If the request contains a Via header field with a sent-
- by value that equals a value placed into previous requests by the
- proxy, the request has been forwarded by this element before. The
- request has either looped or is legitimately spiraling through the
- element. To determine if the request has looped, the element MAY
- perform the branch parameter calculation described in Step 8 of
- Section 16.6 on this message and compare it to the parameter
- received in that Via header field. If the parameters match, the
- request has looped. If they differ, the request is spiraling, and
- processing continues. If a loop is detected, the element MAY
- return a 482 (Loop Detected) response.
-
- 5. Proxy-Require check
-
- Future extensions to this protocol may introduce features that
- require special handling by proxies. Endpoints will include a
- Proxy-Require header field in requests that use these features,
- telling the proxy not to process the request unless the feature is
- understood.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 95]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- If the request contains a Proxy-Require header field (Section
- 20.29) with one or more option-tags this element does not
- understand, the element MUST return a 420 (Bad Extension)
- response. The response MUST include an Unsupported (Section
- 20.40) header field listing those option-tags the element did not
- understand.
-
- 6. Proxy-Authorization check
-
- If an element requires credentials before forwarding a request,
- the request MUST be inspected as described in Section 22.3. That
- section also defines what the element must do if the inspection
- fails.
-
-16.4 Route Information Preprocessing
-
- The proxy MUST inspect the Request-URI of the request. If the
- Request-URI of the request contains a value this proxy previously
- placed into a Record-Route header field (see Section 16.6 item 4),
- the proxy MUST replace the Request-URI in the request with the last
- value from the Route header field, and remove that value from the
- Route header field. The proxy MUST then proceed as if it received
- this modified request.
-
- This will only happen when the element sending the request to the
- proxy (which may have been an endpoint) is a strict router. This
- rewrite on receive is necessary to enable backwards compatibility
- with those elements. It also allows elements following this
- specification to preserve the Request-URI through strict-routing
- proxies (see Section 12.2.1.1).
-
- This requirement does not obligate a proxy to keep state in order
- to detect URIs it previously placed in Record-Route header fields.
- Instead, a proxy need only place enough information in those URIs
- to recognize them as values it provided when they later appear.
-
- If the Request-URI contains a maddr parameter, the proxy MUST check
- to see if its value is in the set of addresses or domains the proxy
- is configured to be responsible for. If the Request-URI has a maddr
- parameter with a value the proxy is responsible for, and the request
- was received using the port and transport indicated (explicitly or by
- default) in the Request-URI, the proxy MUST strip the maddr and any
- non-default port or transport parameter and continue processing as if
- those values had not been present in the request.
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 96]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- A request may arrive with a maddr matching the proxy, but on a
- port or transport different from that indicated in the URI. Such
- a request needs to be forwarded to the proxy using the indicated
- port and transport.
-
- If the first value in the Route header field indicates this proxy,
- the proxy MUST remove that value from the request.
-
-16.5 Determining Request Targets
-
- Next, the proxy calculates the target(s) of the request. The set of
- targets will either be predetermined by the contents of the request
- or will be obtained from an abstract location service. Each target
- in the set is represented as a URI.
-
- If the Request-URI of the request contains an maddr parameter, the
- Request-URI MUST be placed into the target set as the only target
- URI, and the proxy MUST proceed to Section 16.6.
-
- If the domain of the Request-URI indicates a domain this element is
- not responsible for, the Request-URI MUST be placed into the target
- set as the only target, and the element MUST proceed to the task of
- Request Forwarding (Section 16.6).
-
- There are many circumstances in which a proxy might receive a
- request for a domain it is not responsible for. A firewall proxy
- handling outgoing calls (the way HTTP proxies handle outgoing
- requests) is an example of where this is likely to occur.
-
- If the target set for the request has not been predetermined as
- described above, this implies that the element is responsible for the
- domain in the Request-URI, and the element MAY use whatever mechanism
- it desires to determine where to send the request. Any of these
- mechanisms can be modeled as accessing an abstract Location Service.
- This may consist of obtaining information from a location service
- created by a SIP Registrar, reading a database, consulting a presence
- server, utilizing other protocols, or simply performing an
- algorithmic substitution on the Request-URI. When accessing the
- location service constructed by a registrar, the Request-URI MUST
- first be canonicalized as described in Section 10.3 before being used
- as an index. The output of these mechanisms is used to construct the
- target set.
-
- If the Request-URI does not provide sufficient information for the
- proxy to determine the target set, it SHOULD return a 485 (Ambiguous)
- response. This response SHOULD contain a Contact header field
- containing URIs of new addresses to be tried. For example, an INVITE
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 97]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- to sip:John.Smith@company.com may be ambiguous at a proxy whose
- location service has multiple John Smiths listed. See Section
- 21.4.23 for details.
-
- Any information in or about the request or the current environment of
- the element MAY be used in the construction of the target set. For
- instance, different sets may be constructed depending on contents or
- the presence of header fields and bodies, the time of day of the
- request's arrival, the interface on which the request arrived,
- failure of previous requests, or even the element's current level of
- utilization.
-
- As potential targets are located through these services, their URIs
- are added to the target set. Targets can only be placed in the
- target set once. If a target URI is already present in the set
- (based on the definition of equality for the URI type), it MUST NOT
- be added again.
-
- A proxy MUST NOT add additional targets to the target set if the
- Request-URI of the original request does not indicate a resource this
- proxy is responsible for.
-
- A proxy can only change the Request-URI of a request during
- forwarding if it is responsible for that URI. If the proxy is not
- responsible for that URI, it will not recurse on 3xx or 416
- responses as described below.
-
- If the Request-URI of the original request indicates a resource this
- proxy is responsible for, the proxy MAY continue to add targets to
- the set after beginning Request Forwarding. It MAY use any
- information obtained during that processing to determine new targets.
- For instance, a proxy may choose to incorporate contacts obtained in
- a redirect response (3xx) into the target set. If a proxy uses a
- dynamic source of information while building the target set (for
- instance, if it consults a SIP Registrar), it SHOULD monitor that
- source for the duration of processing the request. New locations
- SHOULD be added to the target set as they become available. As
- above, any given URI MUST NOT be added to the set more than once.
-
- Allowing a URI to be added to the set only once reduces
- unnecessary network traffic, and in the case of incorporating
- contacts from redirect requests prevents infinite recursion.
-
- For example, a trivial location service is a "no-op", where the
- target URI is equal to the incoming request URI. The request is sent
- to a specific next hop proxy for further processing. During request
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 98]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- forwarding of Section 16.6, Item 6, the identity of that next hop,
- expressed as a SIP or SIPS URI, is inserted as the top-most Route
- header field value into the request.
-
- If the Request-URI indicates a resource at this proxy that does not
- exist, the proxy MUST return a 404 (Not Found) response.
-
- If the target set remains empty after applying all of the above, the
- proxy MUST return an error response, which SHOULD be the 480
- (Temporarily Unavailable) response.
-
-16.6 Request Forwarding
-
- As soon as the target set is non-empty, a proxy MAY begin forwarding
- the request. A stateful proxy MAY process the set in any order. It
- MAY process multiple targets serially, allowing each client
- transaction to complete before starting the next. It MAY start
- client transactions with every target in parallel. It also MAY
- arbitrarily divide the set into groups, processing the groups
- serially and processing the targets in each group in parallel.
-
- A common ordering mechanism is to use the qvalue parameter of targets
- obtained from Contact header fields (see Section 20.10). Targets are
- processed from highest qvalue to lowest. Targets with equal qvalues
- may be processed in parallel.
-
- A stateful proxy must have a mechanism to maintain the target set as
- responses are received and associate the responses to each forwarded
- request with the original request. For the purposes of this model,
- this mechanism is a "response context" created by the proxy layer
- before forwarding the first request.
-
- For each target, the proxy forwards the request following these
- steps:
-
- 1. Make a copy of the received request
-
- 2. Update the Request-URI
-
- 3. Update the Max-Forwards header field
-
- 4. Optionally add a Record-route header field value
-
- 5. Optionally add additional header fields
-
- 6. Postprocess routing information
-
- 7. Determine the next-hop address, port, and transport
-
-
-
-Rosenberg, et. al. Standards Track [Page 99]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 8. Add a Via header field value
-
- 9. Add a Content-Length header field if necessary
-
- 10. Forward the new request
-
- 11. Set timer C
-
- Each of these steps is detailed below:
-
- 1. Copy request
-
- The proxy starts with a copy of the received request. The copy
- MUST initially contain all of the header fields from the
- received request. Fields not detailed in the processing
- described below MUST NOT be removed. The copy SHOULD maintain
- the ordering of the header fields as in the received request.
- The proxy MUST NOT reorder field values with a common field
- name (See Section 7.3.1). The proxy MUST NOT add to, modify,
- or remove the message body.
-
- An actual implementation need not perform a copy; the primary
- requirement is that the processing for each next hop begin with
- the same request.
-
- 2. Request-URI
-
- The Request-URI in the copy's start line MUST be replaced with
- the URI for this target. If the URI contains any parameters
- not allowed in a Request-URI, they MUST be removed.
-
- This is the essence of a proxy's role. This is the mechanism
- through which a proxy routes a request toward its destination.
-
- In some circumstances, the received Request-URI is placed into
- the target set without being modified. For that target, the
- replacement above is effectively a no-op.
-
- 3. Max-Forwards
-
- If the copy contains a Max-Forwards header field, the proxy
- MUST decrement its value by one (1).
-
- If the copy does not contain a Max-Forwards header field, the
- proxy MUST add one with a field value, which SHOULD be 70.
-
- Some existing UAs will not provide a Max-Forwards header field
- in a request.
-
-
-
-Rosenberg, et. al. Standards Track [Page 100]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 4. Record-Route
-
- If this proxy wishes to remain on the path of future requests
- in a dialog created by this request (assuming the request
- creates a dialog), it MUST insert a Record-Route header field
- value into the copy before any existing Record-Route header
- field values, even if a Route header field is already present.
-
- Requests establishing a dialog may contain a preloaded Route
- header field.
-
- If this request is already part of a dialog, the proxy SHOULD
- insert a Record-Route header field value if it wishes to remain
- on the path of future requests in the dialog. In normal
- endpoint operation as described in Section 12, these Record-
- Route header field values will not have any effect on the route
- sets used by the endpoints.
-
- The proxy will remain on the path if it chooses to not insert a
- Record-Route header field value into requests that are already
- part of a dialog. However, it would be removed from the path
- when an endpoint that has failed reconstitutes the dialog.
-
- A proxy MAY insert a Record-Route header field value into any
- request. If the request does not initiate a dialog, the
- endpoints will ignore the value. See Section 12 for details on
- how endpoints use the Record-Route header field values to
- construct Route header fields.
-
- Each proxy in the path of a request chooses whether to add a
- Record-Route header field value independently - the presence of
- a Record-Route header field in a request does not obligate this
- proxy to add a value.
-
- The URI placed in the Record-Route header field value MUST be a
- SIP or SIPS URI. This URI MUST contain an lr parameter (see
- Section 19.1.1). This URI MAY be different for each
- destination the request is forwarded to. The URI SHOULD NOT
- contain the transport parameter unless the proxy has knowledge
- (such as in a private network) that the next downstream element
- that will be in the path of subsequent requests supports that
- transport.
-
- The URI this proxy provides will be used by some other element
- to make a routing decision. This proxy, in general, has no way
- of knowing the capabilities of that element, so it must
- restrict itself to the mandatory elements of a SIP
- implementation: SIP URIs and either the TCP or UDP transports.
-
-
-
-Rosenberg, et. al. Standards Track [Page 101]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The URI placed in the Record-Route header field MUST resolve to
- the element inserting it (or a suitable stand-in) when the
- server location procedures of [4] are applied to it, so that
- subsequent requests reach the same SIP element. If the
- Request-URI contains a SIPS URI, or the topmost Route header
- field value (after the post processing of bullet 6) contains a
- SIPS URI, the URI placed into the Record-Route header field
- MUST be a SIPS URI. Furthermore, if the request was not
- received over TLS, the proxy MUST insert a Record-Route header
- field. In a similar fashion, a proxy that receives a request
- over TLS, but generates a request without a SIPS URI in the
- Request-URI or topmost Route header field value (after the post
- processing of bullet 6), MUST insert a Record-Route header
- field that is not a SIPS URI.
-
- A proxy at a security perimeter must remain on the perimeter
- throughout the dialog.
-
- If the URI placed in the Record-Route header field needs to be
- rewritten when it passes back through in a response, the URI
- MUST be distinct enough to locate at that time. (The request
- may spiral through this proxy, resulting in more than one
- Record-Route header field value being added). Item 8 of
- Section 16.7 recommends a mechanism to make the URI
- sufficiently distinct.
-
- The proxy MAY include parameters in the Record-Route header
- field value. These will be echoed in some responses to the
- request such as the 200 (OK) responses to INVITE. Such
- parameters may be useful for keeping state in the message
- rather than the proxy.
-
- If a proxy needs to be in the path of any type of dialog (such
- as one straddling a firewall), it SHOULD add a Record-Route
- header field value to every request with a method it does not
- understand since that method may have dialog semantics.
-
- The URI a proxy places into a Record-Route header field is only
- valid for the lifetime of any dialog created by the transaction
- in which it occurs. A dialog-stateful proxy, for example, MAY
- refuse to accept future requests with that value in the
- Request-URI after the dialog has terminated. Non-dialog-
- stateful proxies, of course, have no concept of when the dialog
- has terminated, but they MAY encode enough information in the
- value to compare it against the dialog identifier of future
- requests and MAY reject requests not matching that information.
- Endpoints MUST NOT use a URI obtained from a Record-Route
- header field outside the dialog in which it was provided. See
-
-
-
-Rosenberg, et. al. Standards Track [Page 102]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Section 12 for more information on an endpoint's use of
- Record-Route header fields.
-
- Record-routing may be required by certain services where the
- proxy needs to observe all messages in a dialog. However, it
- slows down processing and impairs scalability and thus proxies
- should only record-route if required for a particular service.
-
- The Record-Route process is designed to work for any SIP
- request that initiates a dialog. INVITE is the only such
- request in this specification, but extensions to the protocol
- MAY define others.
-
- 5. Add Additional Header Fields
-
- The proxy MAY add any other appropriate header fields to the
- copy at this point.
-
- 6. Postprocess routing information
-
- A proxy MAY have a local policy that mandates that a request
- visit a specific set of proxies before being delivered to the
- destination. A proxy MUST ensure that all such proxies are
- loose routers. Generally, this can only be known with
- certainty if the proxies are within the same administrative
- domain. This set of proxies is represented by a set of URIs
- (each of which contains the lr parameter). This set MUST be
- pushed into the Route header field of the copy ahead of any
- existing values, if present. If the Route header field is
- absent, it MUST be added, containing that list of URIs.
-
- If the proxy has a local policy that mandates that the request
- visit one specific proxy, an alternative to pushing a Route
- value into the Route header field is to bypass the forwarding
- logic of item 10 below, and instead just send the request to
- the address, port, and transport for that specific proxy. If
- the request has a Route header field, this alternative MUST NOT
- be used unless it is known that next hop proxy is a loose
- router. Otherwise, this approach MAY be used, but the Route
- insertion mechanism above is preferred for its robustness,
- flexibility, generality and consistency of operation.
- Furthermore, if the Request-URI contains a SIPS URI, TLS MUST
- be used to communicate with that proxy.
-
- If the copy contains a Route header field, the proxy MUST
- inspect the URI in its first value. If that URI does not
- contain an lr parameter, the proxy MUST modify the copy as
- follows:
-
-
-
-Rosenberg, et. al. Standards Track [Page 103]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- - The proxy MUST place the Request-URI into the Route header
- field as the last value.
-
- - The proxy MUST then place the first Route header field value
- into the Request-URI and remove that value from the Route
- header field.
-
- Appending the Request-URI to the Route header field is part of
- a mechanism used to pass the information in that Request-URI
- through strict-routing elements. "Popping" the first Route
- header field value into the Request-URI formats the message the
- way a strict-routing element expects to receive it (with its
- own URI in the Request-URI and the next location to visit in
- the first Route header field value).
-
- 7. Determine Next-Hop Address, Port, and Transport
-
- The proxy MAY have a local policy to send the request to a
- specific IP address, port, and transport, independent of the
- values of the Route and Request-URI. Such a policy MUST NOT be
- used if the proxy is not certain that the IP address, port, and
- transport correspond to a server that is a loose router.
- However, this mechanism for sending the request through a
- specific next hop is NOT RECOMMENDED; instead a Route header
- field should be used for that purpose as described above.
-
- In the absence of such an overriding mechanism, the proxy
- applies the procedures listed in [4] as follows to determine
- where to send the request. If the proxy has reformatted the
- request to send to a strict-routing element as described in
- step 6 above, the proxy MUST apply those procedures to the
- Request-URI of the request. Otherwise, the proxy MUST apply
- the procedures to the first value in the Route header field, if
- present, else the Request-URI. The procedures will produce an
- ordered set of (address, port, transport) tuples.
- Independently of which URI is being used as input to the
- procedures of [4], if the Request-URI specifies a SIPS
- resource, the proxy MUST follow the procedures of [4] as if the
- input URI were a SIPS URI.
-
- As described in [4], the proxy MUST attempt to deliver the
- message to the first tuple in that set, and proceed through the
- set in order until the delivery attempt succeeds.
-
- For each tuple attempted, the proxy MUST format the message as
- appropriate for the tuple and send the request using a new
- client transaction as detailed in steps 8 through 10.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 104]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Since each attempt uses a new client transaction, it represents
- a new branch. Thus, the branch parameter provided with the Via
- header field inserted in step 8 MUST be different for each
- attempt.
-
- If the client transaction reports failure to send the request
- or a timeout from its state machine, the proxy continues to the
- next address in that ordered set. If the ordered set is
- exhausted, the request cannot be forwarded to this element in
- the target set. The proxy does not need to place anything in
- the response context, but otherwise acts as if this element of
- the target set returned a 408 (Request Timeout) final response.
-
- 8. Add a Via header field value
-
- The proxy MUST insert a Via header field value into the copy
- before the existing Via header field values. The construction
- of this value follows the same guidelines of Section 8.1.1.7.
- This implies that the proxy will compute its own branch
- parameter, which will be globally unique for that branch, and
- contain the requisite magic cookie. Note that this implies that
- the branch parameter will be different for different instances
- of a spiraled or looped request through a proxy.
-
- Proxies choosing to detect loops have an additional constraint
- in the value they use for construction of the branch parameter.
- A proxy choosing to detect loops SHOULD create a branch
- parameter separable into two parts by the implementation. The
- first part MUST satisfy the constraints of Section 8.1.1.7 as
- described above. The second is used to perform loop detection
- and distinguish loops from spirals.
-
- Loop detection is performed by verifying that, when a request
- returns to a proxy, those fields having an impact on the
- processing of the request have not changed. The value placed
- in this part of the branch parameter SHOULD reflect all of
- those fields (including any Route, Proxy-Require and Proxy-
- Authorization header fields). This is to ensure that if the
- request is routed back to the proxy and one of those fields
- changes, it is treated as a spiral and not a loop (see Section
- 16.3). A common way to create this value is to compute a
- cryptographic hash of the To tag, From tag, Call-ID header
- field, the Request-URI of the request received (before
- translation), the topmost Via header, and the sequence number
- from the CSeq header field, in addition to any Proxy-Require
- and Proxy-Authorization header fields that may be present. The
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 105]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- algorithm used to compute the hash is implementation-dependent,
- but MD5 (RFC 1321 [35]), expressed in hexadecimal, is a
- reasonable choice. (Base64 is not permissible for a token.)
-
- If a proxy wishes to detect loops, the "branch" parameter it
- supplies MUST depend on all information affecting processing of
- a request, including the incoming Request-URI and any header
- fields affecting the request's admission or routing. This is
- necessary to distinguish looped requests from requests whose
- routing parameters have changed before returning to this
- server.
-
- The request method MUST NOT be included in the calculation of
- the branch parameter. In particular, CANCEL and ACK requests
- (for non-2xx responses) MUST have the same branch value as the
- corresponding request they cancel or acknowledge. The branch
- parameter is used in correlating those requests at the server
- handling them (see Sections 17.2.3 and 9.2).
-
- 9. Add a Content-Length header field if necessary
-
- If the request will be sent to the next hop using a stream-
- based transport and the copy contains no Content-Length header
- field, the proxy MUST insert one with the correct value for the
- body of the request (see Section 20.14).
-
- 10. Forward Request
-
- A stateful proxy MUST create a new client transaction for this
- request as described in Section 17.1 and instructs the
- transaction to send the request using the address, port and
- transport determined in step 7.
-
- 11. Set timer C
-
- In order to handle the case where an INVITE request never
- generates a final response, the TU uses a timer which is called
- timer C. Timer C MUST be set for each client transaction when
- an INVITE request is proxied. The timer MUST be larger than 3
- minutes. Section 16.7 bullet 2 discusses how this timer is
- updated with provisional responses, and Section 16.8 discusses
- processing when it fires.
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 106]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-16.7 Response Processing
-
- When a response is received by an element, it first tries to locate a
- client transaction (Section 17.1.3) matching the response. If none
- is found, the element MUST process the response (even if it is an
- informational response) as a stateless proxy (described below). If a
- match is found, the response is handed to the client transaction.
-
- Forwarding responses for which a client transaction (or more
- generally any knowledge of having sent an associated request) is
- not found improves robustness. In particular, it ensures that
- "late" 2xx responses to INVITE requests are forwarded properly.
-
- As client transactions pass responses to the proxy layer, the
- following processing MUST take place:
-
- 1. Find the appropriate response context
-
- 2. Update timer C for provisional responses
-
- 3. Remove the topmost Via
-
- 4. Add the response to the response context
-
- 5. Check to see if this response should be forwarded immediately
-
- 6. When necessary, choose the best final response from the
- response context
-
- If no final response has been forwarded after every client
- transaction associated with the response context has been terminated,
- the proxy must choose and forward the "best" response from those it
- has seen so far.
-
- The following processing MUST be performed on each response that is
- forwarded. It is likely that more than one response to each request
- will be forwarded: at least each provisional and one final response.
-
- 7. Aggregate authorization header field values if necessary
-
- 8. Optionally rewrite Record-Route header field values
-
- 9. Forward the response
-
- 10. Generate any necessary CANCEL requests
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 107]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Each of the above steps are detailed below:
-
- 1. Find Context
-
- The proxy locates the "response context" it created before
- forwarding the original request using the key described in
- Section 16.6. The remaining processing steps take place in
- this context.
-
- 2. Update timer C for provisional responses
-
- For an INVITE transaction, if the response is a provisional
- response with status codes 101 to 199 inclusive (i.e., anything
- but 100), the proxy MUST reset timer C for that client
- transaction. The timer MAY be reset to a different value, but
- this value MUST be greater than 3 minutes.
-
- 3. Via
-
- The proxy removes the topmost Via header field value from the
- response.
-
- If no Via header field values remain in the response, the
- response was meant for this element and MUST NOT be forwarded.
- The remainder of the processing described in this section is
- not performed on this message, the UAC processing rules
- described in Section 8.1.3 are followed instead (transport
- layer processing has already occurred).
-
- This will happen, for instance, when the element generates
- CANCEL requests as described in Section 10.
-
- 4. Add response to context
-
- Final responses received are stored in the response context
- until a final response is generated on the server transaction
- associated with this context. The response may be a candidate
- for the best final response to be returned on that server
- transaction. Information from this response may be needed in
- forming the best response, even if this response is not chosen.
-
- If the proxy chooses to recurse on any contacts in a 3xx
- response by adding them to the target set, it MUST remove them
- from the response before adding the response to the response
- context. However, a proxy SHOULD NOT recurse to a non-SIPS URI
- if the Request-URI of the original request was a SIPS URI. If
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 108]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- the proxy recurses on all of the contacts in a 3xx response,
- the proxy SHOULD NOT add the resulting contactless response to
- the response context.
-
- Removing the contact before adding the response to the response
- context prevents the next element upstream from retrying a
- location this proxy has already attempted.
-
- 3xx responses may contain a mixture of SIP, SIPS, and non-SIP
- URIs. A proxy may choose to recurse on the SIP and SIPS URIs
- and place the remainder into the response context to be
- returned, potentially in the final response.
-
- If a proxy receives a 416 (Unsupported URI Scheme) response to
- a request whose Request-URI scheme was not SIP, but the scheme
- in the original received request was SIP or SIPS (that is, the
- proxy changed the scheme from SIP or SIPS to something else
- when it proxied a request), the proxy SHOULD add a new URI to
- the target set. This URI SHOULD be a SIP URI version of the
- non-SIP URI that was just tried. In the case of the tel URL,
- this is accomplished by placing the telephone-subscriber part
- of the tel URL into the user part of the SIP URI, and setting
- the hostpart to the domain where the prior request was sent.
- See Section 19.1.6 for more detail on forming SIP URIs from tel
- URLs.
-
- As with a 3xx response, if a proxy "recurses" on the 416 by
- trying a SIP or SIPS URI instead, the 416 response SHOULD NOT
- be added to the response context.
-
- 5. Check response for forwarding
-
- Until a final response has been sent on the server transaction,
- the following responses MUST be forwarded immediately:
-
- - Any provisional response other than 100 (Trying)
-
- - Any 2xx response
-
- If a 6xx response is received, it is not immediately forwarded,
- but the stateful proxy SHOULD cancel all client pending
- transactions as described in Section 10, and it MUST NOT create
- any new branches in this context.
-
- This is a change from RFC 2543, which mandated that the proxy
- was to forward the 6xx response immediately. For an INVITE
- transaction, this approach had the problem that a 2xx response
- could arrive on another branch, in which case the proxy would
-
-
-
-Rosenberg, et. al. Standards Track [Page 109]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- have to forward the 2xx. The result was that the UAC could
- receive a 6xx response followed by a 2xx response, which should
- never be allowed to happen. Under the new rules, upon
- receiving a 6xx, a proxy will issue a CANCEL request, which
- will generally result in 487 responses from all outstanding
- client transactions, and then at that point the 6xx is
- forwarded upstream.
-
- After a final response has been sent on the server transaction,
- the following responses MUST be forwarded immediately:
-
- - Any 2xx response to an INVITE request
-
- A stateful proxy MUST NOT immediately forward any other
- responses. In particular, a stateful proxy MUST NOT forward
- any 100 (Trying) response. Those responses that are candidates
- for forwarding later as the "best" response have been gathered
- as described in step "Add Response to Context".
-
- Any response chosen for immediate forwarding MUST be processed
- as described in steps "Aggregate Authorization Header Field
- Values" through "Record-Route".
-
- This step, combined with the next, ensures that a stateful
- proxy will forward exactly one final response to a non-INVITE
- request, and either exactly one non-2xx response or one or more
- 2xx responses to an INVITE request.
-
- 6. Choosing the best response
-
- A stateful proxy MUST send a final response to a response
- context's server transaction if no final responses have been
- immediately forwarded by the above rules and all client
- transactions in this response context have been terminated.
-
- The stateful proxy MUST choose the "best" final response among
- those received and stored in the response context.
-
- If there are no final responses in the context, the proxy MUST
- send a 408 (Request Timeout) response to the server
- transaction.
-
- Otherwise, the proxy MUST forward a response from the responses
- stored in the response context. It MUST choose from the 6xx
- class responses if any exist in the context. If no 6xx class
- responses are present, the proxy SHOULD choose from the lowest
- response class stored in the response context. The proxy MAY
- select any response within that chosen class. The proxy SHOULD
-
-
-
-Rosenberg, et. al. Standards Track [Page 110]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- give preference to responses that provide information affecting
- resubmission of this request, such as 401, 407, 415, 420, and
- 484 if the 4xx class is chosen.
-
- A proxy which receives a 503 (Service Unavailable) response
- SHOULD NOT forward it upstream unless it can determine that any
- subsequent requests it might proxy will also generate a 503.
- In other words, forwarding a 503 means that the proxy knows it
- cannot service any requests, not just the one for the Request-
- URI in the request which generated the 503. If the only
- response that was received is a 503, the proxy SHOULD generate
- a 500 response and forward that upstream.
-
- The forwarded response MUST be processed as described in steps
- "Aggregate Authorization Header Field Values" through "Record-
- Route".
-
- For example, if a proxy forwarded a request to 4 locations, and
- received 503, 407, 501, and 404 responses, it may choose to
- forward the 407 (Proxy Authentication Required) response.
-
- 1xx and 2xx responses may be involved in the establishment of
- dialogs. When a request does not contain a To tag, the To tag
- in the response is used by the UAC to distinguish multiple
- responses to a dialog creating request. A proxy MUST NOT
- insert a tag into the To header field of a 1xx or 2xx response
- if the request did not contain one. A proxy MUST NOT modify
- the tag in the To header field of a 1xx or 2xx response.
-
- Since a proxy may not insert a tag into the To header field of
- a 1xx response to a request that did not contain one, it cannot
- issue non-100 provisional responses on its own. However, it
- can branch the request to a UAS sharing the same element as the
- proxy. This UAS can return its own provisional responses,
- entering into an early dialog with the initiator of the
- request. The UAS does not have to be a discreet process from
- the proxy. It could be a virtual UAS implemented in the same
- code space as the proxy.
-
- 3-6xx responses are delivered hop-by-hop. When issuing a 3-6xx
- response, the element is effectively acting as a UAS, issuing
- its own response, usually based on the responses received from
- downstream elements. An element SHOULD preserve the To tag
- when simply forwarding a 3-6xx response to a request that did
- not contain a To tag.
-
- A proxy MUST NOT modify the To tag in any forwarded response to
- a request that contains a To tag.
-
-
-
-Rosenberg, et. al. Standards Track [Page 111]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- While it makes no difference to the upstream elements if the
- proxy replaced the To tag in a forwarded 3-6xx response,
- preserving the original tag may assist with debugging.
-
- When the proxy is aggregating information from several
- responses, choosing a To tag from among them is arbitrary, and
- generating a new To tag may make debugging easier. This
- happens, for instance, when combining 401 (Unauthorized) and
- 407 (Proxy Authentication Required) challenges, or combining
- Contact values from unencrypted and unauthenticated 3xx
- responses.
-
- 7. Aggregate Authorization Header Field Values
-
- If the selected response is a 401 (Unauthorized) or 407 (Proxy
- Authentication Required), the proxy MUST collect any WWW-
- Authenticate and Proxy-Authenticate header field values from
- all other 401 (Unauthorized) and 407 (Proxy Authentication
- Required) responses received so far in this response context
- and add them to this response without modification before
- forwarding. The resulting 401 (Unauthorized) or 407 (Proxy
- Authentication Required) response could have several WWW-
- Authenticate AND Proxy-Authenticate header field values.
-
- This is necessary because any or all of the destinations the
- request was forwarded to may have requested credentials. The
- client needs to receive all of those challenges and supply
- credentials for each of them when it retries the request.
- Motivation for this behavior is provided in Section 26.
-
- 8. Record-Route
-
- If the selected response contains a Record-Route header field
- value originally provided by this proxy, the proxy MAY choose
- to rewrite the value before forwarding the response. This
- allows the proxy to provide different URIs for itself to the
- next upstream and downstream elements. A proxy may choose to
- use this mechanism for any reason. For instance, it is useful
- for multi-homed hosts.
-
- If the proxy received the request over TLS, and sent it out
- over a non-TLS connection, the proxy MUST rewrite the URI in
- the Record-Route header field to be a SIPS URI. If the proxy
- received the request over a non-TLS connection, and sent it out
- over TLS, the proxy MUST rewrite the URI in the Record-Route
- header field to be a SIP URI.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 112]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The new URI provided by the proxy MUST satisfy the same
- constraints on URIs placed in Record-Route header fields in
- requests (see Step 4 of Section 16.6) with the following
- modifications:
-
- The URI SHOULD NOT contain the transport parameter unless the
- proxy has knowledge that the next upstream (as opposed to
- downstream) element that will be in the path of subsequent
- requests supports that transport.
-
- When a proxy does decide to modify the Record-Route header
- field in the response, one of the operations it performs is
- locating the Record-Route value that it had inserted. If the
- request spiraled, and the proxy inserted a Record-Route value
- in each iteration of the spiral, locating the correct value in
- the response (which must be the proper iteration in the reverse
- direction) is tricky. The rules above recommend that a proxy
- wishing to rewrite Record-Route header field values insert
- sufficiently distinct URIs into the Record-Route header field
- so that the right one may be selected for rewriting. A
- RECOMMENDED mechanism to achieve this is for the proxy to
- append a unique identifier for the proxy instance to the user
- portion of the URI.
-
- When the response arrives, the proxy modifies the first
- Record-Route whose identifier matches the proxy instance. The
- modification results in a URI without this piece of data
- appended to the user portion of the URI. Upon the next
- iteration, the same algorithm (find the topmost Record-Route
- header field value with the parameter) will correctly extract
- the next Record-Route header field value inserted by that
- proxy.
-
- Not every response to a request to which a proxy adds a
- Record-Route header field value will contain a Record-Route
- header field. If the response does contain a Record-Route
- header field, it will contain the value the proxy added.
-
- 9. Forward response
-
- After performing the processing described in steps "Aggregate
- Authorization Header Field Values" through "Record-Route", the
- proxy MAY perform any feature specific manipulations on the
- selected response. The proxy MUST NOT add to, modify, or
- remove the message body. Unless otherwise specified, the proxy
- MUST NOT remove any header field values other than the Via
- header field value discussed in Section 16.7 Item 3. In
- particular, the proxy MUST NOT remove any "received" parameter
-
-
-
-Rosenberg, et. al. Standards Track [Page 113]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- it may have added to the next Via header field value while
- processing the request associated with this response. The
- proxy MUST pass the response to the server transaction
- associated with the response context. This will result in the
- response being sent to the location now indicated in the
- topmost Via header field value. If the server transaction is
- no longer available to handle the transmission, the element
- MUST forward the response statelessly by sending it to the
- server transport. The server transaction might indicate
- failure to send the response or signal a timeout in its state
- machine. These errors would be logged for diagnostic purposes
- as appropriate, but the protocol requires no remedial action
- from the proxy.
-
- The proxy MUST maintain the response context until all of its
- associated transactions have been terminated, even after
- forwarding a final response.
-
- 10. Generate CANCELs
-
- If the forwarded response was a final response, the proxy MUST
- generate a CANCEL request for all pending client transactions
- associated with this response context. A proxy SHOULD also
- generate a CANCEL request for all pending client transactions
- associated with this response context when it receives a 6xx
- response. A pending client transaction is one that has
- received a provisional response, but no final response (it is
- in the proceeding state) and has not had an associated CANCEL
- generated for it. Generating CANCEL requests is described in
- Section 9.1.
-
- The requirement to CANCEL pending client transactions upon
- forwarding a final response does not guarantee that an endpoint
- will not receive multiple 200 (OK) responses to an INVITE. 200
- (OK) responses on more than one branch may be generated before
- the CANCEL requests can be sent and processed. Further, it is
- reasonable to expect that a future extension may override this
- requirement to issue CANCEL requests.
-
-16.8 Processing Timer C
-
- If timer C should fire, the proxy MUST either reset the timer with
- any value it chooses, or terminate the client transaction. If the
- client transaction has received a provisional response, the proxy
- MUST generate a CANCEL request matching that transaction. If the
- client transaction has not received a provisional response, the proxy
- MUST behave as if the transaction received a 408 (Request Timeout)
- response.
-
-
-
-Rosenberg, et. al. Standards Track [Page 114]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Allowing the proxy to reset the timer allows the proxy to dynamically
- extend the transaction's lifetime based on current conditions (such
- as utilization) when the timer fires.
-
-16.9 Handling Transport Errors
-
- If the transport layer notifies a proxy of an error when it tries to
- forward a request (see Section 18.4), the proxy MUST behave as if the
- forwarded request received a 503 (Service Unavailable) response.
-
- If the proxy is notified of an error when forwarding a response, it
- drops the response. The proxy SHOULD NOT cancel any outstanding
- client transactions associated with this response context due to this
- notification.
-
- If a proxy cancels its outstanding client transactions, a single
- malicious or misbehaving client can cause all transactions to fail
- through its Via header field.
-
-16.10 CANCEL Processing
-
- A stateful proxy MAY generate a CANCEL to any other request it has
- generated at any time (subject to receiving a provisional response to
- that request as described in section 9.1). A proxy MUST cancel any
- pending client transactions associated with a response context when
- it receives a matching CANCEL request.
-
- A stateful proxy MAY generate CANCEL requests for pending INVITE
- client transactions based on the period specified in the INVITE's
- Expires header field elapsing. However, this is generally
- unnecessary since the endpoints involved will take care of signaling
- the end of the transaction.
-
- While a CANCEL request is handled in a stateful proxy by its own
- server transaction, a new response context is not created for it.
- Instead, the proxy layer searches its existing response contexts for
- the server transaction handling the request associated with this
- CANCEL. If a matching response context is found, the element MUST
- immediately return a 200 (OK) response to the CANCEL request. In
- this case, the element is acting as a user agent server as defined in
- Section 8.2. Furthermore, the element MUST generate CANCEL requests
- for all pending client transactions in the context as described in
- Section 16.7 step 10.
-
- If a response context is not found, the element does not have any
- knowledge of the request to apply the CANCEL to. It MUST statelessly
- forward the CANCEL request (it may have statelessly forwarded the
- associated request previously).
-
-
-
-Rosenberg, et. al. Standards Track [Page 115]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-16.11 Stateless Proxy
-
- When acting statelessly, a proxy is a simple message forwarder. Much
- of the processing performed when acting statelessly is the same as
- when behaving statefully. The differences are detailed here.
-
- A stateless proxy does not have any notion of a transaction, or of
- the response context used to describe stateful proxy behavior.
- Instead, the stateless proxy takes messages, both requests and
- responses, directly from the transport layer (See section 18). As a
- result, stateless proxies do not retransmit messages on their own.
- They do, however, forward all retransmissions they receive (they do
- not have the ability to distinguish a retransmission from the
- original message). Furthermore, when handling a request statelessly,
- an element MUST NOT generate its own 100 (Trying) or any other
- provisional response.
-
- A stateless proxy MUST validate a request as described in Section
- 16.3
-
- A stateless proxy MUST follow the request processing steps described
- in Sections 16.4 through 16.5 with the following exception:
-
- o A stateless proxy MUST choose one and only one target from the
- target set. This choice MUST only rely on fields in the
- message and time-invariant properties of the server. In
- particular, a retransmitted request MUST be forwarded to the
- same destination each time it is processed. Furthermore,
- CANCEL and non-Routed ACK requests MUST generate the same
- choice as their associated INVITE.
-
- A stateless proxy MUST follow the request processing steps described
- in Section 16.6 with the following exceptions:
-
- o The requirement for unique branch IDs across space and time
- applies to stateless proxies as well. However, a stateless
- proxy cannot simply use a random number generator to compute
- the first component of the branch ID, as described in Section
- 16.6 bullet 8. This is because retransmissions of a request
- need to have the same value, and a stateless proxy cannot tell
- a retransmission from the original request. Therefore, the
- component of the branch parameter that makes it unique MUST be
- the same each time a retransmitted request is forwarded. Thus
- for a stateless proxy, the branch parameter MUST be computed as
- a combinatoric function of message parameters which are
- invariant on retransmission.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 116]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The stateless proxy MAY use any technique it likes to guarantee
- uniqueness of its branch IDs across transactions. However, the
- following procedure is RECOMMENDED. The proxy examines the
- branch ID in the topmost Via header field of the received
- request. If it begins with the magic cookie, the first
- component of the branch ID of the outgoing request is computed
- as a hash of the received branch ID. Otherwise, the first
- component of the branch ID is computed as a hash of the topmost
- Via, the tag in the To header field, the tag in the From header
- field, the Call-ID header field, the CSeq number (but not
- method), and the Request-URI from the received request. One of
- these fields will always vary across two different
- transactions.
-
- o All other message transformations specified in Section 16.6
- MUST result in the same transformation of a retransmitted
- request. In particular, if the proxy inserts a Record-Route
- value or pushes URIs into the Route header field, it MUST place
- the same values in retransmissions of the request. As for the
- Via branch parameter, this implies that the transformations
- MUST be based on time-invariant configuration or
- retransmission-invariant properties of the request.
-
- o A stateless proxy determines where to forward the request as
- described for stateful proxies in Section 16.6 Item 10. The
- request is sent directly to the transport layer instead of
- through a client transaction.
-
- Since a stateless proxy must forward retransmitted requests to
- the same destination and add identical branch parameters to
- each of them, it can only use information from the message
- itself and time-invariant configuration data for those
- calculations. If the configuration state is not time-invariant
- (for example, if a routing table is updated) any requests that
- could be affected by the change may not be forwarded
- statelessly during an interval equal to the transaction timeout
- window before or after the change. The method of processing
- the affected requests in that interval is an implementation
- decision. A common solution is to forward them transaction
- statefully.
-
- Stateless proxies MUST NOT perform special processing for CANCEL
- requests. They are processed by the above rules as any other
- requests. In particular, a stateless proxy applies the same Route
- header field processing to CANCEL requests that it applies to any
- other request.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 117]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Response processing as described in Section 16.7 does not apply to a
- proxy behaving statelessly. When a response arrives at a stateless
- proxy, the proxy MUST inspect the sent-by value in the first
- (topmost) Via header field value. If that address matches the proxy,
- (it equals a value this proxy has inserted into previous requests)
- the proxy MUST remove that header field value from the response and
- forward the result to the location indicated in the next Via header
- field value. The proxy MUST NOT add to, modify, or remove the
- message body. Unless specified otherwise, the proxy MUST NOT remove
- any other header field values. If the address does not match the
- proxy, the message MUST be silently discarded.
-
-16.12 Summary of Proxy Route Processing
-
- In the absence of local policy to the contrary, the processing a
- proxy performs on a request containing a Route header field can be
- summarized in the following steps.
-
- 1. The proxy will inspect the Request-URI. If it indicates a
- resource owned by this proxy, the proxy will replace it with
- the results of running a location service. Otherwise, the
- proxy will not change the Request-URI.
-
- 2. The proxy will inspect the URI in the topmost Route header
- field value. If it indicates this proxy, the proxy removes it
- from the Route header field (this route node has been
- reached).
-
- 3. The proxy will forward the request to the resource indicated
- by the URI in the topmost Route header field value or in the
- Request-URI if no Route header field is present. The proxy
- determines the address, port and transport to use when
- forwarding the request by applying the procedures in [4] to
- that URI.
-
- If no strict-routing elements are encountered on the path of the
- request, the Request-URI will always indicate the target of the
- request.
-
-16.12.1 Examples
-
-16.12.1.1 Basic SIP Trapezoid
-
- This scenario is the basic SIP trapezoid, U1 -> P1 -> P2 -> U2, with
- both proxies record-routing. Here is the flow.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 118]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- U1 sends:
-
- INVITE sip:callee@domain.com SIP/2.0
- Contact: sip:caller@u1.example.com
-
- to P1. P1 is an outbound proxy. P1 is not responsible for
- domain.com, so it looks it up in DNS and sends it there. It also
- adds a Record-Route header field value:
-
- INVITE sip:callee@domain.com SIP/2.0
- Contact: sip:caller@u1.example.com
- Record-Route: <sip:p1.example.com;lr>
-
- P2 gets this. It is responsible for domain.com so it runs a location
- service and rewrites the Request-URI. It also adds a Record-Route
- header field value. There is no Route header field, so it resolves
- the new Request-URI to determine where to send the request:
-
- INVITE sip:callee@u2.domain.com SIP/2.0
- Contact: sip:caller@u1.example.com
- Record-Route: <sip:p2.domain.com;lr>
- Record-Route: <sip:p1.example.com;lr>
-
- The callee at u2.domain.com gets this and responds with a 200 OK:
-
- SIP/2.0 200 OK
- Contact: sip:callee@u2.domain.com
- Record-Route: <sip:p2.domain.com;lr>
- Record-Route: <sip:p1.example.com;lr>
-
- The callee at u2 also sets its dialog state's remote target URI to
- sip:caller@u1.example.com and its route set to:
-
- (<sip:p2.domain.com;lr>,<sip:p1.example.com;lr>)
-
- This is forwarded by P2 to P1 to U1 as normal. Now, U1 sets its
- dialog state's remote target URI to sip:callee@u2.domain.com and its
- route set to:
-
- (<sip:p1.example.com;lr>,<sip:p2.domain.com;lr>)
-
- Since all the route set elements contain the lr parameter, U1
- constructs the following BYE request:
-
- BYE sip:callee@u2.domain.com SIP/2.0
- Route: <sip:p1.example.com;lr>,<sip:p2.domain.com;lr>
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 119]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- As any other element (including proxies) would do, it resolves the
- URI in the topmost Route header field value using DNS to determine
- where to send the request. This goes to P1. P1 notices that it is
- not responsible for the resource indicated in the Request-URI so it
- doesn't change it. It does see that it is the first value in the
- Route header field, so it removes that value, and forwards the
- request to P2:
-
- BYE sip:callee@u2.domain.com SIP/2.0
- Route: <sip:p2.domain.com;lr>
-
- P2 also notices it is not responsible for the resource indicated by
- the Request-URI (it is responsible for domain.com, not
- u2.domain.com), so it doesn't change it. It does see itself in the
- first Route header field value, so it removes it and forwards the
- following to u2.domain.com based on a DNS lookup against the
- Request-URI:
-
- BYE sip:callee@u2.domain.com SIP/2.0
-
-16.12.1.2 Traversing a Strict-Routing Proxy
-
- In this scenario, a dialog is established across four proxies, each
- of which adds Record-Route header field values. The third proxy
- implements the strict-routing procedures specified in RFC 2543 and
- many works in progress.
-
- U1->P1->P2->P3->P4->U2
-
- The INVITE arriving at U2 contains:
-
- INVITE sip:callee@u2.domain.com SIP/2.0
- Contact: sip:caller@u1.example.com
- Record-Route: <sip:p4.domain.com;lr>
- Record-Route: <sip:p3.middle.com>
- Record-Route: <sip:p2.example.com;lr>
- Record-Route: <sip:p1.example.com;lr>
-
- Which U2 responds to with a 200 OK. Later, U2 sends the following
- BYE request to P4 based on the first Route header field value.
-
- BYE sip:caller@u1.example.com SIP/2.0
- Route: <sip:p4.domain.com;lr>
- Route: <sip:p3.middle.com>
- Route: <sip:p2.example.com;lr>
- Route: <sip:p1.example.com;lr>
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 120]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- P4 is not responsible for the resource indicated in the Request-URI
- so it will leave it alone. It notices that it is the element in the
- first Route header field value so it removes it. It then prepares to
- send the request based on the now first Route header field value of
- sip:p3.middle.com, but it notices that this URI does not contain the
- lr parameter, so before sending, it reformats the request to be:
-
- BYE sip:p3.middle.com SIP/2.0
- Route: <sip:p2.example.com;lr>
- Route: <sip:p1.example.com;lr>
- Route: <sip:caller@u1.example.com>
-
- P3 is a strict router, so it forwards the following to P2:
-
- BYE sip:p2.example.com;lr SIP/2.0
- Route: <sip:p1.example.com;lr>
- Route: <sip:caller@u1.example.com>
-
- P2 sees the request-URI is a value it placed into a Record-Route
- header field, so before further processing, it rewrites the request
- to be:
-
- BYE sip:caller@u1.example.com SIP/2.0
- Route: <sip:p1.example.com;lr>
-
- P2 is not responsible for u1.example.com, so it sends the request to
- P1 based on the resolution of the Route header field value.
-
- P1 notices itself in the topmost Route header field value, so it
- removes it, resulting in:
-
- BYE sip:caller@u1.example.com SIP/2.0
-
- Since P1 is not responsible for u1.example.com and there is no Route
- header field, P1 will forward the request to u1.example.com based on
- the Request-URI.
-
-16.12.1.3 Rewriting Record-Route Header Field Values
-
- In this scenario, U1 and U2 are in different private namespaces and
- they enter a dialog through a proxy P1, which acts as a gateway
- between the namespaces.
-
- U1->P1->U2
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 121]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- U1 sends:
-
- INVITE sip:callee@gateway.leftprivatespace.com SIP/2.0
- Contact: <sip:caller@u1.leftprivatespace.com>
-
- P1 uses its location service and sends the following to U2:
-
- INVITE sip:callee@rightprivatespace.com SIP/2.0
- Contact: <sip:caller@u1.leftprivatespace.com>
- Record-Route: <sip:gateway.rightprivatespace.com;lr>
-
- U2 sends this 200 (OK) back to P1:
-
- SIP/2.0 200 OK
- Contact: <sip:callee@u2.rightprivatespace.com>
- Record-Route: <sip:gateway.rightprivatespace.com;lr>
-
- P1 rewrites its Record-Route header parameter to provide a value that
- U1 will find useful, and sends the following to U1:
-
- SIP/2.0 200 OK
- Contact: <sip:callee@u2.rightprivatespace.com>
- Record-Route: <sip:gateway.leftprivatespace.com;lr>
-
- Later, U1 sends the following BYE request to P1:
-
- BYE sip:callee@u2.rightprivatespace.com SIP/2.0
- Route: <sip:gateway.leftprivatespace.com;lr>
-
- which P1 forwards to U2 as:
-
- BYE sip:callee@u2.rightprivatespace.com SIP/2.0
-
-17 Transactions
-
- SIP is a transactional protocol: interactions between components take
- place in a series of independent message exchanges. Specifically, a
- SIP transaction consists of a single request and any responses to
- that request, which include zero or more provisional responses and
- one or more final responses. In the case of a transaction where the
- request was an INVITE (known as an INVITE transaction), the
- transaction also includes the ACK only if the final response was not
- a 2xx response. If the response was a 2xx, the ACK is not considered
- part of the transaction.
-
- The reason for this separation is rooted in the importance of
- delivering all 200 (OK) responses to an INVITE to the UAC. To
- deliver them all to the UAC, the UAS alone takes responsibility
-
-
-
-Rosenberg, et. al. Standards Track [Page 122]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- for retransmitting them (see Section 13.3.1.4), and the UAC alone
- takes responsibility for acknowledging them with ACK (see Section
- 13.2.2.4). Since this ACK is retransmitted only by the UAC, it is
- effectively considered its own transaction.
-
- Transactions have a client side and a server side. The client side
- is known as a client transaction and the server side as a server
- transaction. The client transaction sends the request, and the
- server transaction sends the response. The client and server
- transactions are logical functions that are embedded in any number of
- elements. Specifically, they exist within user agents and stateful
- proxy servers. Consider the example in Section 4. In this example,
- the UAC executes the client transaction, and its outbound proxy
- executes the server transaction. The outbound proxy also executes a
- client transaction, which sends the request to a server transaction
- in the inbound proxy. That proxy also executes a client transaction,
- which in turn sends the request to a server transaction in the UAS.
- This is shown in Figure 4.
-
- +---------+ +---------+ +---------+ +---------+
- | +-+|Request |+-+ +-+|Request |+-+ +-+|Request |+-+ |
- | |C||------->||S| |C||------->||S| |C||------->||S| |
- | |l|| ||e| |l|| ||e| |l|| ||e| |
- | |i|| ||r| |i|| ||r| |i|| ||r| |
- | |e|| ||v| |e|| ||v| |e|| ||v| |
- | |n|| ||e| |n|| ||e| |n|| ||e| |
- | |t|| ||r| |t|| ||r| |t|| ||r| |
- | | || || | | || || | | || || | |
- | |T|| ||T| |T|| ||T| |T|| ||T| |
- | |r|| ||r| |r|| ||r| |r|| ||r| |
- | |a|| ||a| |a|| ||a| |a|| ||a| |
- | |n|| ||n| |n|| ||n| |n|| ||n| |
- | |s||Response||s| |s||Response||s| |s||Response||s| |
- | +-+|<-------|+-+ +-+|<-------|+-+ +-+|<-------|+-+ |
- +---------+ +---------+ +---------+ +---------+
- UAC Outbound Inbound UAS
- Proxy Proxy
-
- Figure 4: Transaction relationships
-
- A stateless proxy does not contain a client or server transaction.
- The transaction exists between the UA or stateful proxy on one side,
- and the UA or stateful proxy on the other side. As far as SIP
- transactions are concerned, stateless proxies are effectively
- transparent. The purpose of the client transaction is to receive a
- request from the element in which the client is embedded (call this
- element the "Transaction User" or TU; it can be a UA or a stateful
- proxy), and reliably deliver the request to a server transaction.
-
-
-
-Rosenberg, et. al. Standards Track [Page 123]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The client transaction is also responsible for receiving responses
- and delivering them to the TU, filtering out any response
- retransmissions or disallowed responses (such as a response to ACK).
- Additionally, in the case of an INVITE request, the client
- transaction is responsible for generating the ACK request for any
- final response accepting a 2xx response.
-
- Similarly, the purpose of the server transaction is to receive
- requests from the transport layer and deliver them to the TU. The
- server transaction filters any request retransmissions from the
- network. The server transaction accepts responses from the TU and
- delivers them to the transport layer for transmission over the
- network. In the case of an INVITE transaction, it absorbs the ACK
- request for any final response excepting a 2xx response.
-
- The 2xx response and its ACK receive special treatment. This
- response is retransmitted only by a UAS, and its ACK generated only
- by the UAC. This end-to-end treatment is needed so that a caller
- knows the entire set of users that have accepted the call. Because
- of this special handling, retransmissions of the 2xx response are
- handled by the UA core, not the transaction layer. Similarly,
- generation of the ACK for the 2xx is handled by the UA core. Each
- proxy along the path merely forwards each 2xx response to INVITE and
- its corresponding ACK.
-
-17.1 Client Transaction
-
- The client transaction provides its functionality through the
- maintenance of a state machine.
-
- The TU communicates with the client transaction through a simple
- interface. When the TU wishes to initiate a new transaction, it
- creates a client transaction and passes it the SIP request to send
- and an IP address, port, and transport to which to send it. The
- client transaction begins execution of its state machine. Valid
- responses are passed up to the TU from the client transaction.
-
- There are two types of client transaction state machines, depending
- on the method of the request passed by the TU. One handles client
- transactions for INVITE requests. This type of machine is referred
- to as an INVITE client transaction. Another type handles client
- transactions for all requests except INVITE and ACK. This is
- referred to as a non-INVITE client transaction. There is no client
- transaction for ACK. If the TU wishes to send an ACK, it passes one
- directly to the transport layer for transmission.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 124]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The INVITE transaction is different from those of other methods
- because of its extended duration. Normally, human input is required
- in order to respond to an INVITE. The long delays expected for
- sending a response argue for a three-way handshake. On the other
- hand, requests of other methods are expected to complete rapidly.
- Because of the non-INVITE transaction's reliance on a two-way
- handshake, TUs SHOULD respond immediately to non-INVITE requests.
-
-17.1.1 INVITE Client Transaction
-
-17.1.1.1 Overview of INVITE Transaction
-
- The INVITE transaction consists of a three-way handshake. The client
- transaction sends an INVITE, the server transaction sends responses,
- and the client transaction sends an ACK. For unreliable transports
- (such as UDP), the client transaction retransmits requests at an
- interval that starts at T1 seconds and doubles after every
- retransmission. T1 is an estimate of the round-trip time (RTT), and
- it defaults to 500 ms. Nearly all of the transaction timers
- described here scale with T1, and changing T1 adjusts their values.
- The request is not retransmitted over reliable transports. After
- receiving a 1xx response, any retransmissions cease altogether, and
- the client waits for further responses. The server transaction can
- send additional 1xx responses, which are not transmitted reliably by
- the server transaction. Eventually, the server transaction decides
- to send a final response. For unreliable transports, that response
- is retransmitted periodically, and for reliable transports, it is
- sent once. For each final response that is received at the client
- transaction, the client transaction sends an ACK, the purpose of
- which is to quench retransmissions of the response.
-
-17.1.1.2 Formal Description
-
- The state machine for the INVITE client transaction is shown in
- Figure 5. The initial state, "calling", MUST be entered when the TU
- initiates a new client transaction with an INVITE request. The
- client transaction MUST pass the request to the transport layer for
- transmission (see Section 18). If an unreliable transport is being
- used, the client transaction MUST start timer A with a value of T1.
- If a reliable transport is being used, the client transaction SHOULD
- NOT start timer A (Timer A controls request retransmissions). For
- any transport, the client transaction MUST start timer B with a value
- of 64*T1 seconds (Timer B controls transaction timeouts).
-
- When timer A fires, the client transaction MUST retransmit the
- request by passing it to the transport layer, and MUST reset the
- timer with a value of 2*T1. The formal definition of retransmit
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 125]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- within the context of the transaction layer is to take the message
- previously sent to the transport layer and pass it to the transport
- layer once more.
-
- When timer A fires 2*T1 seconds later, the request MUST be
- retransmitted again (assuming the client transaction is still in this
- state). This process MUST continue so that the request is
- retransmitted with intervals that double after each transmission.
- These retransmissions SHOULD only be done while the client
- transaction is in the "calling" state.
-
- The default value for T1 is 500 ms. T1 is an estimate of the RTT
- between the client and server transactions. Elements MAY (though it
- is NOT RECOMMENDED) use smaller values of T1 within closed, private
- networks that do not permit general Internet connection. T1 MAY be
- chosen larger, and this is RECOMMENDED if it is known in advance
- (such as on high latency access links) that the RTT is larger.
- Whatever the value of T1, the exponential backoffs on retransmissions
- described in this section MUST be used.
-
- If the client transaction is still in the "Calling" state when timer
- B fires, the client transaction SHOULD inform the TU that a timeout
- has occurred. The client transaction MUST NOT generate an ACK. The
- value of 64*T1 is equal to the amount of time required to send seven
- requests in the case of an unreliable transport.
-
- If the client transaction receives a provisional response while in
- the "Calling" state, it transitions to the "Proceeding" state. In the
- "Proceeding" state, the client transaction SHOULD NOT retransmit the
- request any longer. Furthermore, the provisional response MUST be
- passed to the TU. Any further provisional responses MUST be passed
- up to the TU while in the "Proceeding" state.
-
- When in either the "Calling" or "Proceeding" states, reception of a
- response with status code from 300-699 MUST cause the client
- transaction to transition to "Completed". The client transaction
- MUST pass the received response up to the TU, and the client
- transaction MUST generate an ACK request, even if the transport is
- reliable (guidelines for constructing the ACK from the response are
- given in Section 17.1.1.3) and then pass the ACK to the transport
- layer for transmission. The ACK MUST be sent to the same address,
- port, and transport to which the original request was sent. The
- client transaction SHOULD start timer D when it enters the
- "Completed" state, with a value of at least 32 seconds for unreliable
- transports, and a value of zero seconds for reliable transports.
- Timer D reflects the amount of time that the server transaction can
- remain in the "Completed" state when unreliable transports are used.
- This is equal to Timer H in the INVITE server transaction, whose
-
-
-
-Rosenberg, et. al. Standards Track [Page 126]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- default is 64*T1. However, the client transaction does not know the
- value of T1 in use by the server transaction, so an absolute minimum
- of 32s is used instead of basing Timer D on T1.
-
- Any retransmissions of the final response that are received while in
- the "Completed" state MUST cause the ACK to be re-passed to the
- transport layer for retransmission, but the newly received response
- MUST NOT be passed up to the TU. A retransmission of the response is
- defined as any response which would match the same client transaction
- based on the rules of Section 17.1.3.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 127]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- |INVITE from TU
- Timer A fires |INVITE sent
- Reset A, V Timer B fires
- INVITE sent +-----------+ or Transport Err.
- +---------| |---------------+inform TU
- | | Calling | |
- +-------->| |-------------->|
- +-----------+ 2xx |
- | | 2xx to TU |
- | |1xx |
- 300-699 +---------------+ |1xx to TU |
- ACK sent | | |
-resp. to TU | 1xx V |
- | 1xx to TU -----------+ |
- | +---------| | |
- | | |Proceeding |-------------->|
- | +-------->| | 2xx |
- | +-----------+ 2xx to TU |
- | 300-699 | |
- | ACK sent, | |
- | resp. to TU| |
- | | | NOTE:
- | 300-699 V |
- | ACK sent +-----------+Transport Err. | transitions
- | +---------| |Inform TU | labeled with
- | | | Completed |-------------->| the event
- | +-------->| | | over the action
- | +-----------+ | to take
- | ^ | |
- | | | Timer D fires |
- +--------------+ | - |
- | |
- V |
- +-----------+ |
- | | |
- | Terminated|<--------------+
- | |
- +-----------+
-
- Figure 5: INVITE client transaction
-
- If timer D fires while the client transaction is in the "Completed"
- state, the client transaction MUST move to the terminated state.
-
- When in either the "Calling" or "Proceeding" states, reception of a
- 2xx response MUST cause the client transaction to enter the
- "Terminated" state, and the response MUST be passed up to the TU.
- The handling of this response depends on whether the TU is a proxy
-
-
-
-Rosenberg, et. al. Standards Track [Page 128]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- core or a UAC core. A UAC core will handle generation of the ACK for
- this response, while a proxy core will always forward the 200 (OK)
- upstream. The differing treatment of 200 (OK) between proxy and UAC
- is the reason that handling of it does not take place in the
- transaction layer.
-
- The client transaction MUST be destroyed the instant it enters the
- "Terminated" state. This is actually necessary to guarantee correct
- operation. The reason is that 2xx responses to an INVITE are treated
- differently; each one is forwarded by proxies, and the ACK handling
- in a UAC is different. Thus, each 2xx needs to be passed to a proxy
- core (so that it can be forwarded) and to a UAC core (so it can be
- acknowledged). No transaction layer processing takes place.
- Whenever a response is received by the transport, if the transport
- layer finds no matching client transaction (using the rules of
- Section 17.1.3), the response is passed directly to the core. Since
- the matching client transaction is destroyed by the first 2xx,
- subsequent 2xx will find no match and therefore be passed to the
- core.
-
-17.1.1.3 Construction of the ACK Request
-
- This section specifies the construction of ACK requests sent within
- the client transaction. A UAC core that generates an ACK for 2xx
- MUST instead follow the rules described in Section 13.
-
- The ACK request constructed by the client transaction MUST contain
- values for the Call-ID, From, and Request-URI that are equal to the
- values of those header fields in the request passed to the transport
- by the client transaction (call this the "original request"). The To
- header field in the ACK MUST equal the To header field in the
- response being acknowledged, and therefore will usually differ from
- the To header field in the original request by the addition of the
- tag parameter. The ACK MUST contain a single Via header field, and
- this MUST be equal to the top Via header field of the original
- request. The CSeq header field in the ACK MUST contain the same
- value for the sequence number as was present in the original request,
- but the method parameter MUST be equal to "ACK".
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 129]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- If the INVITE request whose response is being acknowledged had Route
- header fields, those header fields MUST appear in the ACK. This is
- to ensure that the ACK can be routed properly through any downstream
- stateless proxies.
-
- Although any request MAY contain a body, a body in an ACK is special
- since the request cannot be rejected if the body is not understood.
- Therefore, placement of bodies in ACK for non-2xx is NOT RECOMMENDED,
- but if done, the body types are restricted to any that appeared in
- the INVITE, assuming that the response to the INVITE was not 415. If
- it was, the body in the ACK MAY be any type listed in the Accept
- header field in the 415.
-
- For example, consider the following request:
-
- INVITE sip:bob@biloxi.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKkjshdyff
- To: Bob <sip:bob@biloxi.com>
- From: Alice <sip:alice@atlanta.com>;tag=88sja8x
- Max-Forwards: 70
- Call-ID: 987asjd97y7atg
- CSeq: 986759 INVITE
-
- The ACK request for a non-2xx final response to this request would
- look like this:
-
- ACK sip:bob@biloxi.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKkjshdyff
- To: Bob <sip:bob@biloxi.com>;tag=99sa0xk
- From: Alice <sip:alice@atlanta.com>;tag=88sja8x
- Max-Forwards: 70
- Call-ID: 987asjd97y7atg
- CSeq: 986759 ACK
-
-17.1.2 Non-INVITE Client Transaction
-
-17.1.2.1 Overview of the non-INVITE Transaction
-
- Non-INVITE transactions do not make use of ACK. They are simple
- request-response interactions. For unreliable transports, requests
- are retransmitted at an interval which starts at T1 and doubles until
- it hits T2. If a provisional response is received, retransmissions
- continue for unreliable transports, but at an interval of T2. The
- server transaction retransmits the last response it sent, which can
- be a provisional or final response, only when a retransmission of the
- request is received. This is why request retransmissions need to
- continue even after a provisional response; they are to ensure
- reliable delivery of the final response.
-
-
-
-Rosenberg, et. al. Standards Track [Page 130]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Unlike an INVITE transaction, a non-INVITE transaction has no special
- handling for the 2xx response. The result is that only a single 2xx
- response to a non-INVITE is ever delivered to a UAC.
-
-17.1.2.2 Formal Description
-
- The state machine for the non-INVITE client transaction is shown in
- Figure 6. It is very similar to the state machine for INVITE.
-
- The "Trying" state is entered when the TU initiates a new client
- transaction with a request. When entering this state, the client
- transaction SHOULD set timer F to fire in 64*T1 seconds. The request
- MUST be passed to the transport layer for transmission. If an
- unreliable transport is in use, the client transaction MUST set timer
- E to fire in T1 seconds. If timer E fires while still in this state,
- the timer is reset, but this time with a value of MIN(2*T1, T2).
- When the timer fires again, it is reset to a MIN(4*T1, T2). This
- process continues so that retransmissions occur with an exponentially
- increasing interval that caps at T2. The default value of T2 is 4s,
- and it represents the amount of time a non-INVITE server transaction
- will take to respond to a request, if it does not respond
- immediately. For the default values of T1 and T2, this results in
- intervals of 500 ms, 1 s, 2 s, 4 s, 4 s, 4 s, etc.
-
- If Timer F fires while the client transaction is still in the
- "Trying" state, the client transaction SHOULD inform the TU about the
- timeout, and then it SHOULD enter the "Terminated" state. If a
- provisional response is received while in the "Trying" state, the
- response MUST be passed to the TU, and then the client transaction
- SHOULD move to the "Proceeding" state. If a final response (status
- codes 200-699) is received while in the "Trying" state, the response
- MUST be passed to the TU, and the client transaction MUST transition
- to the "Completed" state.
-
- If Timer E fires while in the "Proceeding" state, the request MUST be
- passed to the transport layer for retransmission, and Timer E MUST be
- reset with a value of T2 seconds. If timer F fires while in the
- "Proceeding" state, the TU MUST be informed of a timeout, and the
- client transaction MUST transition to the terminated state. If a
- final response (status codes 200-699) is received while in the
- "Proceeding" state, the response MUST be passed to the TU, and the
- client transaction MUST transition to the "Completed" state.
-
- Once the client transaction enters the "Completed" state, it MUST set
- Timer K to fire in T4 seconds for unreliable transports, and zero
- seconds for reliable transports. The "Completed" state exists to
- buffer any additional response retransmissions that may be received
- (which is why the client transaction remains there only for
-
-
-
-Rosenberg, et. al. Standards Track [Page 131]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- unreliable transports). T4 represents the amount of time the network
- will take to clear messages between client and server transactions.
- The default value of T4 is 5s. A response is a retransmission when
- it matches the same transaction, using the rules specified in Section
- 17.1.3. If Timer K fires while in this state, the client transaction
- MUST transition to the "Terminated" state.
-
- Once the transaction is in the terminated state, it MUST be destroyed
- immediately.
-
-17.1.3 Matching Responses to Client Transactions
-
- When the transport layer in the client receives a response, it has to
- determine which client transaction will handle the response, so that
- the processing of Sections 17.1.1 and 17.1.2 can take place. The
- branch parameter in the top Via header field is used for this
- purpose. A response matches a client transaction under two
- conditions:
-
- 1. If the response has the same value of the branch parameter in
- the top Via header field as the branch parameter in the top
- Via header field of the request that created the transaction.
-
- 2. If the method parameter in the CSeq header field matches the
- method of the request that created the transaction. The
- method is needed since a CANCEL request constitutes a
- different transaction, but shares the same value of the branch
- parameter.
-
- If a request is sent via multicast, it is possible that it will
- generate multiple responses from different servers. These responses
- will all have the same branch parameter in the topmost Via, but vary
- in the To tag. The first response received, based on the rules
- above, will be used, and others will be viewed as retransmissions.
- That is not an error; multicast SIP provides only a rudimentary
- "single-hop-discovery-like" service that is limited to processing a
- single response. See Section 18.1.1 for details.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 132]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-17.1.4 Handling Transport Errors
-
- |Request from TU
- |send request
- Timer E V
- send request +-----------+
- +---------| |-------------------+
- | | Trying | Timer F |
- +-------->| | or Transport Err.|
- +-----------+ inform TU |
- 200-699 | | |
- resp. to TU | |1xx |
- +---------------+ |resp. to TU |
- | | |
- | Timer E V Timer F |
- | send req +-----------+ or Transport Err. |
- | +---------| | inform TU |
- | | |Proceeding |------------------>|
- | +-------->| |-----+ |
- | +-----------+ |1xx |
- | | ^ |resp to TU |
- | 200-699 | +--------+ |
- | resp. to TU | |
- | | |
- | V |
- | +-----------+ |
- | | | |
- | | Completed | |
- | | | |
- | +-----------+ |
- | ^ | |
- | | | Timer K |
- +--------------+ | - |
- | |
- V |
- NOTE: +-----------+ |
- | | |
- transitions | Terminated|<------------------+
- labeled with | |
- the event +-----------+
- over the action
- to take
-
- Figure 6: non-INVITE client transaction
-
- When the client transaction sends a request to the transport layer to
- be sent, the following procedures are followed if the transport layer
- indicates a failure.
-
-
-
-Rosenberg, et. al. Standards Track [Page 133]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The client transaction SHOULD inform the TU that a transport failure
- has occurred, and the client transaction SHOULD transition directly
- to the "Terminated" state. The TU will handle the failover
- mechanisms described in [4].
-
-17.2 Server Transaction
-
- The server transaction is responsible for the delivery of requests to
- the TU and the reliable transmission of responses. It accomplishes
- this through a state machine. Server transactions are created by the
- core when a request is received, and transaction handling is desired
- for that request (this is not always the case).
-
- As with the client transactions, the state machine depends on whether
- the received request is an INVITE request.
-
-17.2.1 INVITE Server Transaction
-
- The state diagram for the INVITE server transaction is shown in
- Figure 7.
-
- When a server transaction is constructed for a request, it enters the
- "Proceeding" state. The server transaction MUST generate a 100
- (Trying) response unless it knows that the TU will generate a
- provisional or final response within 200 ms, in which case it MAY
- generate a 100 (Trying) response. This provisional response is
- needed to quench request retransmissions rapidly in order to avoid
- network congestion. The 100 (Trying) response is constructed
- according to the procedures in Section 8.2.6, except that the
- insertion of tags in the To header field of the response (when none
- was present in the request) is downgraded from MAY to SHOULD NOT.
- The request MUST be passed to the TU.
-
- The TU passes any number of provisional responses to the server
- transaction. So long as the server transaction is in the
- "Proceeding" state, each of these MUST be passed to the transport
- layer for transmission. They are not sent reliably by the
- transaction layer (they are not retransmitted by it) and do not cause
- a change in the state of the server transaction. If a request
- retransmission is received while in the "Proceeding" state, the most
- recent provisional response that was received from the TU MUST be
- passed to the transport layer for retransmission. A request is a
- retransmission if it matches the same server transaction based on the
- rules of Section 17.2.3.
-
- If, while in the "Proceeding" state, the TU passes a 2xx response to
- the server transaction, the server transaction MUST pass this
- response to the transport layer for transmission. It is not
-
-
-
-Rosenberg, et. al. Standards Track [Page 134]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- retransmitted by the server transaction; retransmissions of 2xx
- responses are handled by the TU. The server transaction MUST then
- transition to the "Terminated" state.
-
- While in the "Proceeding" state, if the TU passes a response with
- status code from 300 to 699 to the server transaction, the response
- MUST be passed to the transport layer for transmission, and the state
- machine MUST enter the "Completed" state. For unreliable transports,
- timer G is set to fire in T1 seconds, and is not set to fire for
- reliable transports.
-
- This is a change from RFC 2543, where responses were always
- retransmitted, even over reliable transports.
-
- When the "Completed" state is entered, timer H MUST be set to fire in
- 64*T1 seconds for all transports. Timer H determines when the server
- transaction abandons retransmitting the response. Its value is
- chosen to equal Timer B, the amount of time a client transaction will
- continue to retry sending a request. If timer G fires, the response
- is passed to the transport layer once more for retransmission, and
- timer G is set to fire in MIN(2*T1, T2) seconds. From then on, when
- timer G fires, the response is passed to the transport again for
- transmission, and timer G is reset with a value that doubles, unless
- that value exceeds T2, in which case it is reset with the value of
- T2. This is identical to the retransmit behavior for requests in the
- "Trying" state of the non-INVITE client transaction. Furthermore,
- while in the "Completed" state, if a request retransmission is
- received, the server SHOULD pass the response to the transport for
- retransmission.
-
- If an ACK is received while the server transaction is in the
- "Completed" state, the server transaction MUST transition to the
- "Confirmed" state. As Timer G is ignored in this state, any
- retransmissions of the response will cease.
-
- If timer H fires while in the "Completed" state, it implies that the
- ACK was never received. In this case, the server transaction MUST
- transition to the "Terminated" state, and MUST indicate to the TU
- that a transaction failure has occurred.
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 135]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- |INVITE
- |pass INV to TU
- INVITE V send 100 if TU won't in 200ms
- send response+-----------+
- +--------| |--------+101-199 from TU
- | | Proceeding| |send response
- +------->| |<-------+
- | | Transport Err.
- | | Inform TU
- | |--------------->+
- +-----------+ |
- 300-699 from TU | |2xx from TU |
- send response | |send response |
- | +------------------>+
- | |
- INVITE V Timer G fires |
- send response+-----------+ send response |
- +--------| |--------+ |
- | | Completed | | |
- +------->| |<-------+ |
- +-----------+ |
- | | |
- ACK | | |
- - | +------------------>+
- | Timer H fires |
- V or Transport Err.|
- +-----------+ Inform TU |
- | | |
- | Confirmed | |
- | | |
- +-----------+ |
- | |
- |Timer I fires |
- |- |
- | |
- V |
- +-----------+ |
- | | |
- | Terminated|<---------------+
- | |
- +-----------+
-
- Figure 7: INVITE server transaction
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 136]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The purpose of the "Confirmed" state is to absorb any additional ACK
- messages that arrive, triggered from retransmissions of the final
- response. When this state is entered, timer I is set to fire in T4
- seconds for unreliable transports, and zero seconds for reliable
- transports. Once timer I fires, the server MUST transition to the
- "Terminated" state.
-
- Once the transaction is in the "Terminated" state, it MUST be
- destroyed immediately. As with client transactions, this is needed
- to ensure reliability of the 2xx responses to INVITE.
-
-17.2.2 Non-INVITE Server Transaction
-
- The state machine for the non-INVITE server transaction is shown in
- Figure 8.
-
- The state machine is initialized in the "Trying" state and is passed
- a request other than INVITE or ACK when initialized. This request is
- passed up to the TU. Once in the "Trying" state, any further request
- retransmissions are discarded. A request is a retransmission if it
- matches the same server transaction, using the rules specified in
- Section 17.2.3.
-
- While in the "Trying" state, if the TU passes a provisional response
- to the server transaction, the server transaction MUST enter the
- "Proceeding" state. The response MUST be passed to the transport
- layer for transmission. Any further provisional responses that are
- received from the TU while in the "Proceeding" state MUST be passed
- to the transport layer for transmission. If a retransmission of the
- request is received while in the "Proceeding" state, the most
- recently sent provisional response MUST be passed to the transport
- layer for retransmission. If the TU passes a final response (status
- codes 200-699) to the server while in the "Proceeding" state, the
- transaction MUST enter the "Completed" state, and the response MUST
- be passed to the transport layer for transmission.
-
- When the server transaction enters the "Completed" state, it MUST set
- Timer J to fire in 64*T1 seconds for unreliable transports, and zero
- seconds for reliable transports. While in the "Completed" state, the
- server transaction MUST pass the final response to the transport
- layer for retransmission whenever a retransmission of the request is
- received. Any other final responses passed by the TU to the server
- transaction MUST be discarded while in the "Completed" state. The
- server transaction remains in this state until Timer J fires, at
- which point it MUST transition to the "Terminated" state.
-
- The server transaction MUST be destroyed the instant it enters the
- "Terminated" state.
-
-
-
-Rosenberg, et. al. Standards Track [Page 137]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-17.2.3 Matching Requests to Server Transactions
-
- When a request is received from the network by the server, it has to
- be matched to an existing transaction. This is accomplished in the
- following manner.
-
- The branch parameter in the topmost Via header field of the request
- is examined. If it is present and begins with the magic cookie
- "z9hG4bK", the request was generated by a client transaction
- compliant to this specification. Therefore, the branch parameter
- will be unique across all transactions sent by that client. The
- request matches a transaction if:
-
- 1. the branch parameter in the request is equal to the one in the
- top Via header field of the request that created the
- transaction, and
-
- 2. the sent-by value in the top Via of the request is equal to the
- one in the request that created the transaction, and
-
- 3. the method of the request matches the one that created the
- transaction, except for ACK, where the method of the request
- that created the transaction is INVITE.
-
- This matching rule applies to both INVITE and non-INVITE transactions
- alike.
-
- The sent-by value is used as part of the matching process because
- there could be accidental or malicious duplication of branch
- parameters from different clients.
-
- If the branch parameter in the top Via header field is not present,
- or does not contain the magic cookie, the following procedures are
- used. These exist to handle backwards compatibility with RFC 2543
- compliant implementations.
-
- The INVITE request matches a transaction if the Request-URI, To tag,
- From tag, Call-ID, CSeq, and top Via header field match those of the
- INVITE request which created the transaction. In this case, the
- INVITE is a retransmission of the original one that created the
- transaction. The ACK request matches a transaction if the Request-
- URI, From tag, Call-ID, CSeq number (not the method), and top Via
- header field match those of the INVITE request which created the
- transaction, and the To tag of the ACK matches the To tag of the
- response sent by the server transaction. Matching is done based on
- the matching rules defined for each of those header fields.
- Inclusion of the tag in the To header field in the ACK matching
- process helps disambiguate ACK for 2xx from ACK for other responses
-
-
-
-Rosenberg, et. al. Standards Track [Page 138]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- at a proxy, which may have forwarded both responses (This can occur
- in unusual conditions. Specifically, when a proxy forked a request,
- and then crashes, the responses may be delivered to another proxy,
- which might end up forwarding multiple responses upstream). An ACK
- request that matches an INVITE transaction matched by a previous ACK
- is considered a retransmission of that previous ACK.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 139]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- |Request received
- |pass to TU
- V
- +-----------+
- | |
- | Trying |-------------+
- | | |
- +-----------+ |200-699 from TU
- | |send response
- |1xx from TU |
- |send response |
- | |
- Request V 1xx from TU |
- send response+-----------+send response|
- +--------| |--------+ |
- | | Proceeding| | |
- +------->| |<-------+ |
- +<--------------| | |
- |Trnsprt Err +-----------+ |
- |Inform TU | |
- | | |
- | |200-699 from TU |
- | |send response |
- | Request V |
- | send response+-----------+ |
- | +--------| | |
- | | | Completed |<------------+
- | +------->| |
- +<--------------| |
- |Trnsprt Err +-----------+
- |Inform TU |
- | |Timer J fires
- | |-
- | |
- | V
- | +-----------+
- | | |
- +-------------->| Terminated|
- | |
- +-----------+
-
- Figure 8: non-INVITE server transaction
-
- For all other request methods, a request is matched to a transaction
- if the Request-URI, To tag, From tag, Call-ID, CSeq (including the
- method), and top Via header field match those of the request that
- created the transaction. Matching is done based on the matching
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 140]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- rules defined for each of those header fields. When a non-INVITE
- request matches an existing transaction, it is a retransmission of
- the request that created that transaction.
-
- Because the matching rules include the Request-URI, the server cannot
- match a response to a transaction. When the TU passes a response to
- the server transaction, it must pass it to the specific server
- transaction for which the response is targeted.
-
-17.2.4 Handling Transport Errors
-
- When the server transaction sends a response to the transport layer
- to be sent, the following procedures are followed if the transport
- layer indicates a failure.
-
- First, the procedures in [4] are followed, which attempt to deliver
- the response to a backup. If those should all fail, based on the
- definition of failure in [4], the server transaction SHOULD inform
- the TU that a failure has occurred, and SHOULD transition to the
- terminated state.
-
-18 Transport
-
- The transport layer is responsible for the actual transmission of
- requests and responses over network transports. This includes
- determination of the connection to use for a request or response in
- the case of connection-oriented transports.
-
- The transport layer is responsible for managing persistent
- connections for transport protocols like TCP and SCTP, or TLS over
- those, including ones opened to the transport layer. This includes
- connections opened by the client or server transports, so that
- connections are shared between client and server transport functions.
- These connections are indexed by the tuple formed from the address,
- port, and transport protocol at the far end of the connection. When
- a connection is opened by the transport layer, this index is set to
- the destination IP, port and transport. When the connection is
- accepted by the transport layer, this index is set to the source IP
- address, port number, and transport. Note that, because the source
- port is often ephemeral, but it cannot be known whether it is
- ephemeral or selected through procedures in [4], connections accepted
- by the transport layer will frequently not be reused. The result is
- that two proxies in a "peering" relationship using a connection-
- oriented transport frequently will have two connections in use, one
- for transactions initiated in each direction.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 141]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- It is RECOMMENDED that connections be kept open for some
- implementation-defined duration after the last message was sent or
- received over that connection. This duration SHOULD at least equal
- the longest amount of time the element would need in order to bring a
- transaction from instantiation to the terminated state. This is to
- make it likely that transactions are completed over the same
- connection on which they are initiated (for example, request,
- response, and in the case of INVITE, ACK for non-2xx responses).
- This usually means at least 64*T1 (see Section 17.1.1.1 for a
- definition of T1). However, it could be larger in an element that
- has a TU using a large value for timer C (bullet 11 of Section 16.6),
- for example.
-
- All SIP elements MUST implement UDP and TCP. SIP elements MAY
- implement other protocols.
-
- Making TCP mandatory for the UA is a substantial change from RFC
- 2543. It has arisen out of the need to handle larger messages,
- which MUST use TCP, as discussed below. Thus, even if an element
- never sends large messages, it may receive one and needs to be
- able to handle them.
-
-18.1 Clients
-
-18.1.1 Sending Requests
-
- The client side of the transport layer is responsible for sending the
- request and receiving responses. The user of the transport layer
- passes the client transport the request, an IP address, port,
- transport, and possibly TTL for multicast destinations.
-
- If a request is within 200 bytes of the path MTU, or if it is larger
- than 1300 bytes and the path MTU is unknown, the request MUST be sent
- using an RFC 2914 [43] congestion controlled transport protocol, such
- as TCP. If this causes a change in the transport protocol from the
- one indicated in the top Via, the value in the top Via MUST be
- changed. This prevents fragmentation of messages over UDP and
- provides congestion control for larger messages. However,
- implementations MUST be able to handle messages up to the maximum
- datagram packet size. For UDP, this size is 65,535 bytes, including
- IP and UDP headers.
-
- The 200 byte "buffer" between the message size and the MTU
- accommodates the fact that the response in SIP can be larger than
- the request. This happens due to the addition of Record-Route
- header field values to the responses to INVITE, for example. With
- the extra buffer, the response can be about 170 bytes larger than
- the request, and still not be fragmented on IPv4 (about 30 bytes
-
-
-
-Rosenberg, et. al. Standards Track [Page 142]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- is consumed by IP/UDP, assuming no IPSec). 1300 is chosen when
- path MTU is not known, based on the assumption of a 1500 byte
- Ethernet MTU.
-
- If an element sends a request over TCP because of these message size
- constraints, and that request would have otherwise been sent over
- UDP, if the attempt to establish the connection generates either an
- ICMP Protocol Not Supported, or results in a TCP reset, the element
- SHOULD retry the request, using UDP. This is only to provide
- backwards compatibility with RFC 2543 compliant implementations that
- do not support TCP. It is anticipated that this behavior will be
- deprecated in a future revision of this specification.
-
- A client that sends a request to a multicast address MUST add the
- "maddr" parameter to its Via header field value containing the
- destination multicast address, and for IPv4, SHOULD add the "ttl"
- parameter with a value of 1. Usage of IPv6 multicast is not defined
- in this specification, and will be a subject of future
- standardization when the need arises.
-
- These rules result in a purposeful limitation of multicast in SIP.
- Its primary function is to provide a "single-hop-discovery-like"
- service, delivering a request to a group of homogeneous servers,
- where it is only required to process the response from any one of
- them. This functionality is most useful for registrations. In fact,
- based on the transaction processing rules in Section 17.1.3, the
- client transaction will accept the first response, and view any
- others as retransmissions because they all contain the same Via
- branch identifier.
-
- Before a request is sent, the client transport MUST insert a value of
- the "sent-by" field into the Via header field. This field contains
- an IP address or host name, and port. The usage of an FQDN is
- RECOMMENDED. This field is used for sending responses under certain
- conditions, described below. If the port is absent, the default
- value depends on the transport. It is 5060 for UDP, TCP and SCTP,
- 5061 for TLS.
-
- For reliable transports, the response is normally sent on the
- connection on which the request was received. Therefore, the client
- transport MUST be prepared to receive the response on the same
- connection used to send the request. Under error conditions, the
- server may attempt to open a new connection to send the response. To
- handle this case, the transport layer MUST also be prepared to
- receive an incoming connection on the source IP address from which
- the request was sent and port number in the "sent-by" field. It also
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 143]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- MUST be prepared to receive incoming connections on any address and
- port that would be selected by a server based on the procedures
- described in Section 5 of [4].
-
- For unreliable unicast transports, the client transport MUST be
- prepared to receive responses on the source IP address from which the
- request is sent (as responses are sent back to the source address)
- and the port number in the "sent-by" field. Furthermore, as with
- reliable transports, in certain cases the response will be sent
- elsewhere. The client MUST be prepared to receive responses on any
- address and port that would be selected by a server based on the
- procedures described in Section 5 of [4].
-
- For multicast, the client transport MUST be prepared to receive
- responses on the same multicast group and port to which the request
- is sent (that is, it needs to be a member of the multicast group it
- sent the request to.)
-
- If a request is destined to an IP address, port, and transport to
- which an existing connection is open, it is RECOMMENDED that this
- connection be used to send the request, but another connection MAY be
- opened and used.
-
- If a request is sent using multicast, it is sent to the group
- address, port, and TTL provided by the transport user. If a request
- is sent using unicast unreliable transports, it is sent to the IP
- address and port provided by the transport user.
-
-18.1.2 Receiving Responses
-
- When a response is received, the client transport examines the top
- Via header field value. If the value of the "sent-by" parameter in
- that header field value does not correspond to a value that the
- client transport is configured to insert into requests, the response
- MUST be silently discarded.
-
- If there are any client transactions in existence, the client
- transport uses the matching procedures of Section 17.1.3 to attempt
- to match the response to an existing transaction. If there is a
- match, the response MUST be passed to that transaction. Otherwise,
- the response MUST be passed to the core (whether it be stateless
- proxy, stateful proxy, or UA) for further processing. Handling of
- these "stray" responses is dependent on the core (a proxy will
- forward them, while a UA will discard, for example).
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 144]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-18.2 Servers
-
-18.2.1 Receiving Requests
-
- A server SHOULD be prepared to receive requests on any IP address,
- port and transport combination that can be the result of a DNS lookup
- on a SIP or SIPS URI [4] that is handed out for the purposes of
- communicating with that server. In this context, "handing out"
- includes placing a URI in a Contact header field in a REGISTER
- request or a redirect response, or in a Record-Route header field in
- a request or response. A URI can also be "handed out" by placing it
- on a web page or business card. It is also RECOMMENDED that a server
- listen for requests on the default SIP ports (5060 for TCP and UDP,
- 5061 for TLS over TCP) on all public interfaces. The typical
- exception would be private networks, or when multiple server
- instances are running on the same host. For any port and interface
- that a server listens on for UDP, it MUST listen on that same port
- and interface for TCP. This is because a message may need to be sent
- using TCP, rather than UDP, if it is too large. As a result, the
- converse is not true. A server need not listen for UDP on a
- particular address and port just because it is listening on that same
- address and port for TCP. There may, of course, be other reasons why
- a server needs to listen for UDP on a particular address and port.
-
- When the server transport receives a request over any transport, it
- MUST examine the value of the "sent-by" parameter in the top Via
- header field value. If the host portion of the "sent-by" parameter
- contains a domain name, or if it contains an IP address that differs
- from the packet source address, the server MUST add a "received"
- parameter to that Via header field value. This parameter MUST
- contain the source address from which the packet was received. This
- is to assist the server transport layer in sending the response,
- since it must be sent to the source IP address from which the request
- came.
-
- Consider a request received by the server transport which looks like,
- in part:
-
- INVITE sip:bob@Biloxi.com SIP/2.0
- Via: SIP/2.0/UDP bobspc.biloxi.com:5060
-
- The request is received with a source IP address of 192.0.2.4.
- Before passing the request up, the transport adds a "received"
- parameter, so that the request would look like, in part:
-
- INVITE sip:bob@Biloxi.com SIP/2.0
- Via: SIP/2.0/UDP bobspc.biloxi.com:5060;received=192.0.2.4
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 145]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Next, the server transport attempts to match the request to a server
- transaction. It does so using the matching rules described in
- Section 17.2.3. If a matching server transaction is found, the
- request is passed to that transaction for processing. If no match is
- found, the request is passed to the core, which may decide to
- construct a new server transaction for that request. Note that when
- a UAS core sends a 2xx response to INVITE, the server transaction is
- destroyed. This means that when the ACK arrives, there will be no
- matching server transaction, and based on this rule, the ACK is
- passed to the UAS core, where it is processed.
-
-18.2.2 Sending Responses
-
- The server transport uses the value of the top Via header field in
- order to determine where to send a response. It MUST follow the
- following process:
-
- o If the "sent-protocol" is a reliable transport protocol such as
- TCP or SCTP, or TLS over those, the response MUST be sent using
- the existing connection to the source of the original request
- that created the transaction, if that connection is still open.
- This requires the server transport to maintain an association
- between server transactions and transport connections. If that
- connection is no longer open, the server SHOULD open a
- connection to the IP address in the "received" parameter, if
- present, using the port in the "sent-by" value, or the default
- port for that transport, if no port is specified. If that
- connection attempt fails, the server SHOULD use the procedures
- in [4] for servers in order to determine the IP address and
- port to open the connection and send the response to.
-
- o Otherwise, if the Via header field value contains a "maddr"
- parameter, the response MUST be forwarded to the address listed
- there, using the port indicated in "sent-by", or port 5060 if
- none is present. If the address is a multicast address, the
- response SHOULD be sent using the TTL indicated in the "ttl"
- parameter, or with a TTL of 1 if that parameter is not present.
-
- o Otherwise (for unreliable unicast transports), if the top Via
- has a "received" parameter, the response MUST be sent to the
- address in the "received" parameter, using the port indicated
- in the "sent-by" value, or using port 5060 if none is specified
- explicitly. If this fails, for example, elicits an ICMP "port
- unreachable" response, the procedures of Section 5 of [4]
- SHOULD be used to determine where to send the response.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 146]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o Otherwise, if it is not receiver-tagged, the response MUST be
- sent to the address indicated by the "sent-by" value, using the
- procedures in Section 5 of [4].
-
-18.3 Framing
-
- In the case of message-oriented transports (such as UDP), if the
- message has a Content-Length header field, the message body is
- assumed to contain that many bytes. If there are additional bytes in
- the transport packet beyond the end of the body, they MUST be
- discarded. If the transport packet ends before the end of the
- message body, this is considered an error. If the message is a
- response, it MUST be discarded. If the message is a request, the
- element SHOULD generate a 400 (Bad Request) response. If the message
- has no Content-Length header field, the message body is assumed to
- end at the end of the transport packet.
-
- In the case of stream-oriented transports such as TCP, the Content-
- Length header field indicates the size of the body. The Content-
- Length header field MUST be used with stream oriented transports.
-
-18.4 Error Handling
-
- Error handling is independent of whether the message was a request or
- response.
-
- If the transport user asks for a message to be sent over an
- unreliable transport, and the result is an ICMP error, the behavior
- depends on the type of ICMP error. Host, network, port or protocol
- unreachable errors, or parameter problem errors SHOULD cause the
- transport layer to inform the transport user of a failure in sending.
- Source quench and TTL exceeded ICMP errors SHOULD be ignored.
-
- If the transport user asks for a request to be sent over a reliable
- transport, and the result is a connection failure, the transport
- layer SHOULD inform the transport user of a failure in sending.
-
-19 Common Message Components
-
- There are certain components of SIP messages that appear in various
- places within SIP messages (and sometimes, outside of them) that
- merit separate discussion.
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 147]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-19.1 SIP and SIPS Uniform Resource Indicators
-
- A SIP or SIPS URI identifies a communications resource. Like all
- URIs, SIP and SIPS URIs may be placed in web pages, email messages,
- or printed literature. They contain sufficient information to
- initiate and maintain a communication session with the resource.
-
- Examples of communications resources include the following:
-
- o a user of an online service
-
- o an appearance on a multi-line phone
-
- o a mailbox on a messaging system
-
- o a PSTN number at a gateway service
-
- o a group (such as "sales" or "helpdesk") in an organization
-
- A SIPS URI specifies that the resource be contacted securely. This
- means, in particular, that TLS is to be used between the UAC and the
- domain that owns the URI. From there, secure communications are used
- to reach the user, where the specific security mechanism depends on
- the policy of the domain. Any resource described by a SIP URI can be
- "upgraded" to a SIPS URI by just changing the scheme, if it is
- desired to communicate with that resource securely.
-
-19.1.1 SIP and SIPS URI Components
-
- The "sip:" and "sips:" schemes follow the guidelines in RFC 2396 [5].
- They use a form similar to the mailto URL, allowing the specification
- of SIP request-header fields and the SIP message-body. This makes it
- possible to specify the subject, media type, or urgency of sessions
- initiated by using a URI on a web page or in an email message. The
- formal syntax for a SIP or SIPS URI is presented in Section 25. Its
- general form, in the case of a SIP URI, is:
-
- sip:user:password@host:port;uri-parameters?headers
-
- The format for a SIPS URI is the same, except that the scheme is
- "sips" instead of sip. These tokens, and some of the tokens in their
- expansions, have the following meanings:
-
- user: The identifier of a particular resource at the host being
- addressed. The term "host" in this context frequently refers
- to a domain. The "userinfo" of a URI consists of this user
- field, the password field, and the @ sign following them. The
- userinfo part of a URI is optional and MAY be absent when the
-
-
-
-Rosenberg, et. al. Standards Track [Page 148]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- destination host does not have a notion of users or when the
- host itself is the resource being identified. If the @ sign is
- present in a SIP or SIPS URI, the user field MUST NOT be empty.
-
- If the host being addressed can process telephone numbers, for
- instance, an Internet telephony gateway, a telephone-
- subscriber field defined in RFC 2806 [9] MAY be used to
- populate the user field. There are special escaping rules for
- encoding telephone-subscriber fields in SIP and SIPS URIs
- described in Section 19.1.2.
-
- password: A password associated with the user. While the SIP and
- SIPS URI syntax allows this field to be present, its use is NOT
- RECOMMENDED, because the passing of authentication information
- in clear text (such as URIs) has proven to be a security risk
- in almost every case where it has been used. For instance,
- transporting a PIN number in this field exposes the PIN.
-
- Note that the password field is just an extension of the user
- portion. Implementations not wishing to give special
- significance to the password portion of the field MAY simply
- treat "user:password" as a single string.
-
- host: The host providing the SIP resource. The host part contains
- either a fully-qualified domain name or numeric IPv4 or IPv6
- address. Using the fully-qualified domain name form is
- RECOMMENDED whenever possible.
-
- port: The port number where the request is to be sent.
-
- URI parameters: Parameters affecting a request constructed from
- the URI.
-
- URI parameters are added after the hostport component and are
- separated by semi-colons.
-
- URI parameters take the form:
-
- parameter-name "=" parameter-value
-
- Even though an arbitrary number of URI parameters may be
- included in a URI, any given parameter-name MUST NOT appear
- more than once.
-
- This extensible mechanism includes the transport, maddr, ttl,
- user, method and lr parameters.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 149]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The transport parameter determines the transport mechanism to
- be used for sending SIP messages, as specified in [4]. SIP can
- use any network transport protocol. Parameter names are
- defined for UDP (RFC 768 [14]), TCP (RFC 761 [15]), and SCTP
- (RFC 2960 [16]). For a SIPS URI, the transport parameter MUST
- indicate a reliable transport.
-
- The maddr parameter indicates the server address to be
- contacted for this user, overriding any address derived from
- the host field. When an maddr parameter is present, the port
- and transport components of the URI apply to the address
- indicated in the maddr parameter value. [4] describes the
- proper interpretation of the transport, maddr, and hostport in
- order to obtain the destination address, port, and transport
- for sending a request.
-
- The maddr field has been used as a simple form of loose source
- routing. It allows a URI to specify a proxy that must be
- traversed en-route to the destination. Continuing to use the
- maddr parameter this way is strongly discouraged (the
- mechanisms that enable it are deprecated). Implementations
- should instead use the Route mechanism described in this
- document, establishing a pre-existing route set if necessary
- (see Section 8.1.1.1). This provides a full URI to describe
- the node to be traversed.
-
- The ttl parameter determines the time-to-live value of the UDP
- multicast packet and MUST only be used if maddr is a multicast
- address and the transport protocol is UDP. For example, to
- specify a call to alice@atlanta.com using multicast to
- 239.255.255.1 with a ttl of 15, the following URI would be
- used:
-
- sip:alice@atlanta.com;maddr=239.255.255.1;ttl=15
-
- The set of valid telephone-subscriber strings is a subset of
- valid user strings. The user URI parameter exists to
- distinguish telephone numbers from user names that happen to
- look like telephone numbers. If the user string contains a
- telephone number formatted as a telephone-subscriber, the user
- parameter value "phone" SHOULD be present. Even without this
- parameter, recipients of SIP and SIPS URIs MAY interpret the
- pre-@ part as a telephone number if local restrictions on the
- name space for user name allow it.
-
- The method of the SIP request constructed from the URI can be
- specified with the method parameter.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 150]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The lr parameter, when present, indicates that the element
- responsible for this resource implements the routing mechanisms
- specified in this document. This parameter will be used in the
- URIs proxies place into Record-Route header field values, and
- may appear in the URIs in a pre-existing route set.
-
- This parameter is used to achieve backwards compatibility with
- systems implementing the strict-routing mechanisms of RFC 2543
- and the rfc2543bis drafts up to bis-05. An element preparing
- to send a request based on a URI not containing this parameter
- can assume the receiving element implements strict-routing and
- reformat the message to preserve the information in the
- Request-URI.
-
- Since the uri-parameter mechanism is extensible, SIP elements
- MUST silently ignore any uri-parameters that they do not
- understand.
-
- Headers: Header fields to be included in a request constructed
- from the URI.
-
- Headers fields in the SIP request can be specified with the "?"
- mechanism within a URI. The header names and values are
- encoded in ampersand separated hname = hvalue pairs. The
- special hname "body" indicates that the associated hvalue is
- the message-body of the SIP request.
-
- Table 1 summarizes the use of SIP and SIPS URI components based on
- the context in which the URI appears. The external column describes
- URIs appearing anywhere outside of a SIP message, for instance on a
- web page or business card. Entries marked "m" are mandatory, those
- marked "o" are optional, and those marked "-" are not allowed.
- Elements processing URIs SHOULD ignore any disallowed components if
- they are present. The second column indicates the default value of
- an optional element if it is not present. "--" indicates that the
- element is either not optional, or has no default value.
-
- URIs in Contact header fields have different restrictions depending
- on the context in which the header field appears. One set applies to
- messages that establish and maintain dialogs (INVITE and its 200 (OK)
- response). The other applies to registration and redirection
- messages (REGISTER, its 200 (OK) response, and 3xx class responses to
- any method).
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 151]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-19.1.2 Character Escaping Requirements
-
- dialog
- reg./redir. Contact/
- default Req.-URI To From Contact R-R/Route external
-user -- o o o o o o
-password -- o o o o o o
-host -- m m m m m m
-port (1) o - - o o o
-user-param ip o o o o o o
-method INVITE - - - - - o
-maddr-param -- o - - o o o
-ttl-param 1 o - - o - o
-transp.-param (2) o - - o o o
-lr-param -- o - - - o o
-other-param -- o o o o o o
-headers -- - - - o - o
-
- (1): The default port value is transport and scheme dependent. The
- default is 5060 for sip: using UDP, TCP, or SCTP. The default is
- 5061 for sip: using TLS over TCP and sips: over TCP.
-
- (2): The default transport is scheme dependent. For sip:, it is UDP.
- For sips:, it is TCP.
-
- Table 1: Use and default values of URI components for SIP header
- field values, Request-URI and references
-
- SIP follows the requirements and guidelines of RFC 2396 [5] when
- defining the set of characters that must be escaped in a SIP URI, and
- uses its ""%" HEX HEX" mechanism for escaping. From RFC 2396 [5]:
-
- The set of characters actually reserved within any given URI
- component is defined by that component. In general, a character
- is reserved if the semantics of the URI changes if the character
- is replaced with its escaped US-ASCII encoding [5]. Excluded US-
- ASCII characters (RFC 2396 [5]), such as space and control
- characters and characters used as URI delimiters, also MUST be
- escaped. URIs MUST NOT contain unescaped space and control
- characters.
-
- For each component, the set of valid BNF expansions defines exactly
- which characters may appear unescaped. All other characters MUST be
- escaped.
-
- For example, "@" is not in the set of characters in the user
- component, so the user "j@s0n" must have at least the @ sign encoded,
- as in "j%40s0n".
-
-
-
-Rosenberg, et. al. Standards Track [Page 152]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Expanding the hname and hvalue tokens in Section 25 show that all URI
- reserved characters in header field names and values MUST be escaped.
-
- The telephone-subscriber subset of the user component has special
- escaping considerations. The set of characters not reserved in the
- RFC 2806 [9] description of telephone-subscriber contains a number of
- characters in various syntax elements that need to be escaped when
- used in SIP URIs. Any characters occurring in a telephone-subscriber
- that do not appear in an expansion of the BNF for the user rule MUST
- be escaped.
-
- Note that character escaping is not allowed in the host component of
- a SIP or SIPS URI (the % character is not valid in its expansion).
- This is likely to change in the future as requirements for
- Internationalized Domain Names are finalized. Current
- implementations MUST NOT attempt to improve robustness by treating
- received escaped characters in the host component as literally
- equivalent to their unescaped counterpart. The behavior required to
- meet the requirements of IDN may be significantly different.
-
-19.1.3 Example SIP and SIPS URIs
-
- sip:alice@atlanta.com
- sip:alice:secretword@atlanta.com;transport=tcp
- sips:alice@atlanta.com?subject=project%20x&priority=urgent
- sip:+1-212-555-1212:1234@gateway.com;user=phone
- sips:1212@gateway.com
- sip:alice@192.0.2.4
- sip:atlanta.com;method=REGISTER?to=alice%40atlanta.com
- sip:alice;day=tuesday@atlanta.com
-
- The last sample URI above has a user field value of
- "alice;day=tuesday". The escaping rules defined above allow a
- semicolon to appear unescaped in this field. For the purposes of
- this protocol, the field is opaque. The structure of that value is
- only useful to the SIP element responsible for the resource.
-
-19.1.4 URI Comparison
-
- Some operations in this specification require determining whether two
- SIP or SIPS URIs are equivalent. In this specification, registrars
- need to compare bindings in Contact URIs in REGISTER requests (see
- Section 10.3.). SIP and SIPS URIs are compared for equality
- according to the following rules:
-
- o A SIP and SIPS URI are never equivalent.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 153]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o Comparison of the userinfo of SIP and SIPS URIs is case-
- sensitive. This includes userinfo containing passwords or
- formatted as telephone-subscribers. Comparison of all other
- components of the URI is case-insensitive unless explicitly
- defined otherwise.
-
- o The ordering of parameters and header fields is not significant
- in comparing SIP and SIPS URIs.
-
- o Characters other than those in the "reserved" set (see RFC 2396
- [5]) are equivalent to their ""%" HEX HEX" encoding.
-
- o An IP address that is the result of a DNS lookup of a host name
- does not match that host name.
-
- o For two URIs to be equal, the user, password, host, and port
- components must match.
-
- A URI omitting the user component will not match a URI that
- includes one. A URI omitting the password component will not
- match a URI that includes one.
-
- A URI omitting any component with a default value will not
- match a URI explicitly containing that component with its
- default value. For instance, a URI omitting the optional port
- component will not match a URI explicitly declaring port 5060.
- The same is true for the transport-parameter, ttl-parameter,
- user-parameter, and method components.
-
- Defining sip:user@host to not be equivalent to
- sip:user@host:5060 is a change from RFC 2543. When deriving
- addresses from URIs, equivalent addresses are expected from
- equivalent URIs. The URI sip:user@host:5060 will always
- resolve to port 5060. The URI sip:user@host may resolve to
- other ports through the DNS SRV mechanisms detailed in [4].
-
- o URI uri-parameter components are compared as follows:
-
- - Any uri-parameter appearing in both URIs must match.
-
- - A user, ttl, or method uri-parameter appearing in only one
- URI never matches, even if it contains the default value.
-
- - A URI that includes an maddr parameter will not match a URI
- that contains no maddr parameter.
-
- - All other uri-parameters appearing in only one URI are
- ignored when comparing the URIs.
-
-
-
-Rosenberg, et. al. Standards Track [Page 154]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o URI header components are never ignored. Any present header
- component MUST be present in both URIs and match for the URIs
- to match. The matching rules are defined for each header field
- in Section 20.
-
- The URIs within each of the following sets are equivalent:
-
- sip:%61lice@atlanta.com;transport=TCP
- sip:alice@AtLanTa.CoM;Transport=tcp
-
- sip:carol@chicago.com
- sip:carol@chicago.com;newparam=5
- sip:carol@chicago.com;security=on
-
- sip:biloxi.com;transport=tcp;method=REGISTER?to=sip:bob%40biloxi.com
- sip:biloxi.com;method=REGISTER;transport=tcp?to=sip:bob%40biloxi.com
-
- sip:alice@atlanta.com?subject=project%20x&priority=urgent
- sip:alice@atlanta.com?priority=urgent&subject=project%20x
-
- The URIs within each of the following sets are not equivalent:
-
- SIP:ALICE@AtLanTa.CoM;Transport=udp (different usernames)
- sip:alice@AtLanTa.CoM;Transport=UDP
-
- sip:bob@biloxi.com (can resolve to different ports)
- sip:bob@biloxi.com:5060
-
- sip:bob@biloxi.com (can resolve to different transports)
- sip:bob@biloxi.com;transport=udp
-
- sip:bob@biloxi.com (can resolve to different port and transports)
- sip:bob@biloxi.com:6000;transport=tcp
-
- sip:carol@chicago.com (different header component)
- sip:carol@chicago.com?Subject=next%20meeting
-
- sip:bob@phone21.boxesbybob.com (even though that's what
- sip:bob@192.0.2.4 phone21.boxesbybob.com resolves to)
-
- Note that equality is not transitive:
-
- o sip:carol@chicago.com and sip:carol@chicago.com;security=on are
- equivalent
-
- o sip:carol@chicago.com and sip:carol@chicago.com;security=off
- are equivalent
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 155]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o sip:carol@chicago.com;security=on and
- sip:carol@chicago.com;security=off are not equivalent
-
-19.1.5 Forming Requests from a URI
-
- An implementation needs to take care when forming requests directly
- from a URI. URIs from business cards, web pages, and even from
- sources inside the protocol such as registered contacts may contain
- inappropriate header fields or body parts.
-
- An implementation MUST include any provided transport, maddr, ttl, or
- user parameter in the Request-URI of the formed request. If the URI
- contains a method parameter, its value MUST be used as the method of
- the request. The method parameter MUST NOT be placed in the
- Request-URI. Unknown URI parameters MUST be placed in the message's
- Request-URI.
-
- An implementation SHOULD treat the presence of any headers or body
- parts in the URI as a desire to include them in the message, and
- choose to honor the request on a per-component basis.
-
- An implementation SHOULD NOT honor these obviously dangerous header
- fields: From, Call-ID, CSeq, Via, and Record-Route.
-
- An implementation SHOULD NOT honor any requested Route header field
- values in order to not be used as an unwitting agent in malicious
- attacks.
-
- An implementation SHOULD NOT honor requests to include header fields
- that may cause it to falsely advertise its location or capabilities.
- These include: Accept, Accept-Encoding, Accept-Language, Allow,
- Contact (in its dialog usage), Organization, Supported, and User-
- Agent.
-
- An implementation SHOULD verify the accuracy of any requested
- descriptive header fields, including: Content-Disposition, Content-
- Encoding, Content-Language, Content-Length, Content-Type, Date,
- Mime-Version, and Timestamp.
-
- If the request formed from constructing a message from a given URI is
- not a valid SIP request, the URI is invalid. An implementation MUST
- NOT proceed with transmitting the request. It should instead pursue
- the course of action due an invalid URI in the context it occurs.
-
- The constructed request can be invalid in many ways. These
- include, but are not limited to, syntax error in header fields,
- invalid combinations of URI parameters, or an incorrect
- description of the message body.
-
-
-
-Rosenberg, et. al. Standards Track [Page 156]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Sending a request formed from a given URI may require capabilities
- unavailable to the implementation. The URI might indicate use of an
- unimplemented transport or extension, for example. An implementation
- SHOULD refuse to send these requests rather than modifying them to
- match their capabilities. An implementation MUST NOT send a request
- requiring an extension that it does not support.
-
- For example, such a request can be formed through the presence of
- a Require header parameter or a method URI parameter with an
- unknown or explicitly unsupported value.
-
-19.1.6 Relating SIP URIs and tel URLs
-
- When a tel URL (RFC 2806 [9]) is converted to a SIP or SIPS URI, the
- entire telephone-subscriber portion of the tel URL, including any
- parameters, is placed into the userinfo part of the SIP or SIPS URI.
-
- Thus, tel:+358-555-1234567;postd=pp22 becomes
-
- sip:+358-555-1234567;postd=pp22@foo.com;user=phone
-
- or
- sips:+358-555-1234567;postd=pp22@foo.com;user=phone
-
- not
- sip:+358-555-1234567@foo.com;postd=pp22;user=phone
-
- or
-
- sips:+358-555-1234567@foo.com;postd=pp22;user=phone
-
- In general, equivalent "tel" URLs converted to SIP or SIPS URIs in
- this fashion may not produce equivalent SIP or SIPS URIs. The
- userinfo of SIP and SIPS URIs are compared as a case-sensitive
- string. Variance in case-insensitive portions of tel URLs and
- reordering of tel URL parameters does not affect tel URL equivalence,
- but does affect the equivalence of SIP URIs formed from them.
-
- For example,
-
- tel:+358-555-1234567;postd=pp22
- tel:+358-555-1234567;POSTD=PP22
-
- are equivalent, while
-
- sip:+358-555-1234567;postd=pp22@foo.com;user=phone
- sip:+358-555-1234567;POSTD=PP22@foo.com;user=phone
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 157]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- are not.
-
- Likewise,
-
- tel:+358-555-1234567;postd=pp22;isub=1411
- tel:+358-555-1234567;isub=1411;postd=pp22
-
- are equivalent, while
-
- sip:+358-555-1234567;postd=pp22;isub=1411@foo.com;user=phone
- sip:+358-555-1234567;isub=1411;postd=pp22@foo.com;user=phone
-
- are not.
-
- To mitigate this problem, elements constructing telephone-subscriber
- fields to place in the userinfo part of a SIP or SIPS URI SHOULD fold
- any case-insensitive portion of telephone-subscriber to lower case,
- and order the telephone-subscriber parameters lexically by parameter
- name, excepting isdn-subaddress and post-dial, which occur first and
- in that order. (All components of a tel URL except for future-
- extension parameters are defined to be compared case-insensitive.)
-
- Following this suggestion, both
-
- tel:+358-555-1234567;postd=pp22
- tel:+358-555-1234567;POSTD=PP22
-
- become
-
- sip:+358-555-1234567;postd=pp22@foo.com;user=phone
-
- and both
-
- tel:+358-555-1234567;tsp=a.b;phone-context=5
- tel:+358-555-1234567;phone-context=5;tsp=a.b
-
- become
-
- sip:+358-555-1234567;phone-context=5;tsp=a.b@foo.com;user=phone
-
-19.2 Option Tags
-
- Option tags are unique identifiers used to designate new options
- (extensions) in SIP. These tags are used in Require (Section 20.32),
- Proxy-Require (Section 20.29), Supported (Section 20.37) and
- Unsupported (Section 20.40) header fields. Note that these options
- appear as parameters in those header fields in an option-tag = token
- form (see Section 25 for the definition of token).
-
-
-
-Rosenberg, et. al. Standards Track [Page 158]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Option tags are defined in standards track RFCs. This is a change
- from past practice, and is instituted to ensure continuing multi-
- vendor interoperability (see discussion in Section 20.32 and Section
- 20.37). An IANA registry of option tags is used to ensure easy
- reference.
-
-19.3 Tags
-
- The "tag" parameter is used in the To and From header fields of SIP
- messages. It serves as a general mechanism to identify a dialog,
- which is the combination of the Call-ID along with two tags, one from
- each participant in the dialog. When a UA sends a request outside of
- a dialog, it contains a From tag only, providing "half" of the dialog
- ID. The dialog is completed from the response(s), each of which
- contributes the second half in the To header field. The forking of
- SIP requests means that multiple dialogs can be established from a
- single request. This also explains the need for the two-sided dialog
- identifier; without a contribution from the recipients, the
- originator could not disambiguate the multiple dialogs established
- from a single request.
-
- When a tag is generated by a UA for insertion into a request or
- response, it MUST be globally unique and cryptographically random
- with at least 32 bits of randomness. A property of this selection
- requirement is that a UA will place a different tag into the From
- header of an INVITE than it would place into the To header of the
- response to the same INVITE. This is needed in order for a UA to
- invite itself to a session, a common case for "hairpinning" of calls
- in PSTN gateways. Similarly, two INVITEs for different calls will
- have different From tags, and two responses for different calls will
- have different To tags.
-
- Besides the requirement for global uniqueness, the algorithm for
- generating a tag is implementation-specific. Tags are helpful in
- fault tolerant systems, where a dialog is to be recovered on an
- alternate server after a failure. A UAS can select the tag in such a
- way that a backup can recognize a request as part of a dialog on the
- failed server, and therefore determine that it should attempt to
- recover the dialog and any other state associated with it.
-
-20 Header Fields
-
- The general syntax for header fields is covered in Section 7.3. This
- section lists the full set of header fields along with notes on
- syntax, meaning, and usage. Throughout this section, we use [HX.Y]
- to refer to Section X.Y of the current HTTP/1.1 specification RFC
- 2616 [8]. Examples of each header field are given.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 159]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Information about header fields in relation to methods and proxy
- processing is summarized in Tables 2 and 3.
-
- The "where" column describes the request and response types in which
- the header field can be used. Values in this column are:
-
- R: header field may only appear in requests;
-
- r: header field may only appear in responses;
-
- 2xx, 4xx, etc.: A numerical value or range indicates response
- codes with which the header field can be used;
-
- c: header field is copied from the request to the response.
-
- An empty entry in the "where" column indicates that the header
- field may be present in all requests and responses.
-
- The "proxy" column describes the operations a proxy may perform on a
- header field:
-
- a: A proxy can add or concatenate the header field if not present.
-
- m: A proxy can modify an existing header field value.
-
- d: A proxy can delete a header field value.
-
- r: A proxy must be able to read the header field, and thus this
- header field cannot be encrypted.
-
- The next six columns relate to the presence of a header field in a
- method:
-
- c: Conditional; requirements on the header field depend on the
- context of the message.
-
- m: The header field is mandatory.
-
- m*: The header field SHOULD be sent, but clients/servers need to
- be prepared to receive messages without that header field.
-
- o: The header field is optional.
-
- t: The header field SHOULD be sent, but clients/servers need to be
- prepared to receive messages without that header field.
-
- If a stream-based protocol (such as TCP) is used as a
- transport, then the header field MUST be sent.
-
-
-
-Rosenberg, et. al. Standards Track [Page 160]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- *: The header field is required if the message body is not empty.
- See Sections 20.14, 20.15 and 7.4 for details.
-
- -: The header field is not applicable.
-
- "Optional" means that an element MAY include the header field in a
- request or response, and a UA MAY ignore the header field if present
- in the request or response (The exception to this rule is the Require
- header field discussed in 20.32). A "mandatory" header field MUST be
- present in a request, and MUST be understood by the UAS receiving the
- request. A mandatory response header field MUST be present in the
- response, and the header field MUST be understood by the UAC
- processing the response. "Not applicable" means that the header
- field MUST NOT be present in a request. If one is placed in a
- request by mistake, it MUST be ignored by the UAS receiving the
- request. Similarly, a header field labeled "not applicable" for a
- response means that the UAS MUST NOT place the header field in the
- response, and the UAC MUST ignore the header field in the response.
-
- A UA SHOULD ignore extension header parameters that are not
- understood.
-
- A compact form of some common header field names is also defined for
- use when overall message size is an issue.
-
- The Contact, From, and To header fields contain a URI. If the URI
- contains a comma, question mark or semicolon, the URI MUST be
- enclosed in angle brackets (< and >). Any URI parameters are
- contained within these brackets. If the URI is not enclosed in angle
- brackets, any semicolon-delimited parameters are header-parameters,
- not URI parameters.
-
-20.1 Accept
-
- The Accept header field follows the syntax defined in [H14.1]. The
- semantics are also identical, with the exception that if no Accept
- header field is present, the server SHOULD assume a default value of
- application/sdp.
-
- An empty Accept header field means that no formats are acceptable.
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 161]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Example:
-
- Header field where proxy ACK BYE CAN INV OPT REG
- ___________________________________________________________
- Accept R - o - o m* o
- Accept 2xx - - - o m* o
- Accept 415 - c - c c c
- Accept-Encoding R - o - o o o
- Accept-Encoding 2xx - - - o m* o
- Accept-Encoding 415 - c - c c c
- Accept-Language R - o - o o o
- Accept-Language 2xx - - - o m* o
- Accept-Language 415 - c - c c c
- Alert-Info R ar - - - o - -
- Alert-Info 180 ar - - - o - -
- Allow R - o - o o o
- Allow 2xx - o - m* m* o
- Allow r - o - o o o
- Allow 405 - m - m m m
- Authentication-Info 2xx - o - o o o
- Authorization R o o o o o o
- Call-ID c r m m m m m m
- Call-Info ar - - - o o o
- Contact R o - - m o o
- Contact 1xx - - - o - -
- Contact 2xx - - - m o o
- Contact 3xx d - o - o o o
- Contact 485 - o - o o o
- Content-Disposition o o - o o o
- Content-Encoding o o - o o o
- Content-Language o o - o o o
- Content-Length ar t t t t t t
- Content-Type * * - * * *
- CSeq c r m m m m m m
- Date a o o o o o o
- Error-Info 300-699 a - o o o o o
- Expires - - - o - o
- From c r m m m m m m
- In-Reply-To R - - - o - -
- Max-Forwards R amr m m m m m m
- Min-Expires 423 - - - - - m
- MIME-Version o o - o o o
- Organization ar - - - o o o
-
- Table 2: Summary of header fields, A--O
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 162]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Header field where proxy ACK BYE CAN INV OPT REG
- ___________________________________________________________________
- Priority R ar - - - o - -
- Proxy-Authenticate 407 ar - m - m m m
- Proxy-Authenticate 401 ar - o o o o o
- Proxy-Authorization R dr o o - o o o
- Proxy-Require R ar - o - o o o
- Record-Route R ar o o o o o -
- Record-Route 2xx,18x mr - o o o o -
- Reply-To - - - o - -
- Require ar - c - c c c
- Retry-After 404,413,480,486 - o o o o o
- 500,503 - o o o o o
- 600,603 - o o o o o
- Route R adr c c c c c c
- Server r - o o o o o
- Subject R - - - o - -
- Supported R - o o m* o o
- Supported 2xx - o o m* m* o
- Timestamp o o o o o o
- To c(1) r m m m m m m
- Unsupported 420 - m - m m m
- User-Agent o o o o o o
- Via R amr m m m m m m
- Via rc dr m m m m m m
- Warning r - o o o o o
- WWW-Authenticate 401 ar - m - m m m
- WWW-Authenticate 407 ar - o - o o o
-
- Table 3: Summary of header fields, P--Z; (1): copied with possible
- addition of tag
-
- Accept: application/sdp;level=1, application/x-private, text/html
-
-20.2 Accept-Encoding
-
- The Accept-Encoding header field is similar to Accept, but restricts
- the content-codings [H3.5] that are acceptable in the response. See
- [H14.3]. The semantics in SIP are identical to those defined in
- [H14.3].
-
- An empty Accept-Encoding header field is permissible. It is
- equivalent to Accept-Encoding: identity, that is, only the identity
- encoding, meaning no encoding, is permissible.
-
- If no Accept-Encoding header field is present, the server SHOULD
- assume a default value of identity.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 163]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- This differs slightly from the HTTP definition, which indicates that
- when not present, any encoding can be used, but the identity encoding
- is preferred.
-
- Example:
-
- Accept-Encoding: gzip
-
-20.3 Accept-Language
-
- The Accept-Language header field is used in requests to indicate the
- preferred languages for reason phrases, session descriptions, or
- status responses carried as message bodies in the response. If no
- Accept-Language header field is present, the server SHOULD assume all
- languages are acceptable to the client.
-
- The Accept-Language header field follows the syntax defined in
- [H14.4]. The rules for ordering the languages based on the "q"
- parameter apply to SIP as well.
-
- Example:
-
- Accept-Language: da, en-gb;q=0.8, en;q=0.7
-
-20.4 Alert-Info
-
- When present in an INVITE request, the Alert-Info header field
- specifies an alternative ring tone to the UAS. When present in a 180
- (Ringing) response, the Alert-Info header field specifies an
- alternative ringback tone to the UAC. A typical usage is for a proxy
- to insert this header field to provide a distinctive ring feature.
-
- The Alert-Info header field can introduce security risks. These
- risks and the ways to handle them are discussed in Section 20.9,
- which discusses the Call-Info header field since the risks are
- identical.
-
- In addition, a user SHOULD be able to disable this feature
- selectively.
-
- This helps prevent disruptions that could result from the use of
- this header field by untrusted elements.
-
- Example:
-
- Alert-Info: <http://www.example.com/sounds/moo.wav>
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 164]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-20.5 Allow
-
- The Allow header field lists the set of methods supported by the UA
- generating the message.
-
- All methods, including ACK and CANCEL, understood by the UA MUST be
- included in the list of methods in the Allow header field, when
- present. The absence of an Allow header field MUST NOT be
- interpreted to mean that the UA sending the message supports no
- methods. Rather, it implies that the UA is not providing any
- information on what methods it supports.
-
- Supplying an Allow header field in responses to methods other than
- OPTIONS reduces the number of messages needed.
-
- Example:
-
- Allow: INVITE, ACK, OPTIONS, CANCEL, BYE
-
-20.6 Authentication-Info
-
- The Authentication-Info header field provides for mutual
- authentication with HTTP Digest. A UAS MAY include this header field
- in a 2xx response to a request that was successfully authenticated
- using digest based on the Authorization header field.
-
- Syntax and semantics follow those specified in RFC 2617 [17].
-
- Example:
-
- Authentication-Info: nextnonce="47364c23432d2e131a5fb210812c"
-
-20.7 Authorization
-
- The Authorization header field contains authentication credentials of
- a UA. Section 22.2 overviews the use of the Authorization header
- field, and Section 22.4 describes the syntax and semantics when used
- with HTTP authentication.
-
- This header field, along with Proxy-Authorization, breaks the general
- rules about multiple header field values. Although not a comma-
- separated list, this header field name may be present multiple times,
- and MUST NOT be combined into a single header line using the usual
- rules described in Section 7.3.
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 165]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- In the example below, there are no quotes around the Digest
- parameter:
-
- Authorization: Digest username="Alice", realm="atlanta.com",
- nonce="84a4cc6f3082121f32b42a2187831a9e",
- response="7587245234b3434cc3412213e5f113a5432"
-
-20.8 Call-ID
-
- The Call-ID header field uniquely identifies a particular invitation
- or all registrations of a particular client. A single multimedia
- conference can give rise to several calls with different Call-IDs,
- for example, if a user invites a single individual several times to
- the same (long-running) conference. Call-IDs are case-sensitive and
- are simply compared byte-by-byte.
-
- The compact form of the Call-ID header field is i.
-
- Examples:
-
- Call-ID: f81d4fae-7dec-11d0-a765-00a0c91e6bf6@biloxi.com
- i:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@192.0.2.4
-
-20.9 Call-Info
-
- The Call-Info header field provides additional information about the
- caller or callee, depending on whether it is found in a request or
- response. The purpose of the URI is described by the "purpose"
- parameter. The "icon" parameter designates an image suitable as an
- iconic representation of the caller or callee. The "info" parameter
- describes the caller or callee in general, for example, through a web
- page. The "card" parameter provides a business card, for example, in
- vCard [36] or LDIF [37] formats. Additional tokens can be registered
- using IANA and the procedures in Section 27.
-
- Use of the Call-Info header field can pose a security risk. If a
- callee fetches the URIs provided by a malicious caller, the callee
- may be at risk for displaying inappropriate or offensive content,
- dangerous or illegal content, and so on. Therefore, it is
- RECOMMENDED that a UA only render the information in the Call-Info
- header field if it can verify the authenticity of the element that
- originated the header field and trusts that element. This need not
- be the peer UA; a proxy can insert this header field into requests.
-
- Example:
-
- Call-Info: <http://wwww.example.com/alice/photo.jpg> ;purpose=icon,
- <http://www.example.com/alice/> ;purpose=info
-
-
-
-Rosenberg, et. al. Standards Track [Page 166]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-20.10 Contact
-
- A Contact header field value provides a URI whose meaning depends on
- the type of request or response it is in.
-
- A Contact header field value can contain a display name, a URI with
- URI parameters, and header parameters.
-
- This document defines the Contact parameters "q" and "expires".
- These parameters are only used when the Contact is present in a
- REGISTER request or response, or in a 3xx response. Additional
- parameters may be defined in other specifications.
-
- When the header field value contains a display name, the URI
- including all URI parameters is enclosed in "<" and ">". If no "<"
- and ">" are present, all parameters after the URI are header
- parameters, not URI parameters. The display name can be tokens, or a
- quoted string, if a larger character set is desired.
-
- Even if the "display-name" is empty, the "name-addr" form MUST be
- used if the "addr-spec" contains a comma, semicolon, or question
- mark. There may or may not be LWS between the display-name and the
- "<".
-
- These rules for parsing a display name, URI and URI parameters, and
- header parameters also apply for the header fields To and From.
-
- The Contact header field has a role similar to the Location header
- field in HTTP. However, the HTTP header field only allows one
- address, unquoted. Since URIs can contain commas and semicolons
- as reserved characters, they can be mistaken for header or
- parameter delimiters, respectively.
-
- The compact form of the Contact header field is m (for "moved").
-
- Examples:
-
- Contact: "Mr. Watson" <sip:watson@worcester.bell-telephone.com>
- ;q=0.7; expires=3600,
- "Mr. Watson" <mailto:watson@bell-telephone.com> ;q=0.1
- m: <sips:bob@192.0.2.4>;expires=60
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 167]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-20.11 Content-Disposition
-
- The Content-Disposition header field describes how the message body
- or, for multipart messages, a message body part is to be interpreted
- by the UAC or UAS. This SIP header field extends the MIME Content-
- Type (RFC 2183 [18]).
-
- Several new "disposition-types" of the Content-Disposition header are
- defined by SIP. The value "session" indicates that the body part
- describes a session, for either calls or early (pre-call) media. The
- value "render" indicates that the body part should be displayed or
- otherwise rendered to the user. Note that the value "render" is used
- rather than "inline" to avoid the connotation that the MIME body is
- displayed as a part of the rendering of the entire message (since the
- MIME bodies of SIP messages oftentimes are not displayed to users).
- For backward-compatibility, if the Content-Disposition header field
- is missing, the server SHOULD assume bodies of Content-Type
- application/sdp are the disposition "session", while other content
- types are "render".
-
- The disposition type "icon" indicates that the body part contains an
- image suitable as an iconic representation of the caller or callee
- that could be rendered informationally by a user agent when a message
- has been received, or persistently while a dialog takes place. The
- value "alert" indicates that the body part contains information, such
- as an audio clip, that should be rendered by the user agent in an
- attempt to alert the user to the receipt of a request, generally a
- request that initiates a dialog; this alerting body could for example
- be rendered as a ring tone for a phone call after a 180 Ringing
- provisional response has been sent.
-
- Any MIME body with a "disposition-type" that renders content to the
- user should only be processed when a message has been properly
- authenticated.
-
- The handling parameter, handling-param, describes how the UAS should
- react if it receives a message body whose content type or disposition
- type it does not understand. The parameter has defined values of
- "optional" and "required". If the handling parameter is missing, the
- value "required" SHOULD be assumed. The handling parameter is
- described in RFC 3204 [19].
-
- If this header field is missing, the MIME type determines the default
- content disposition. If there is none, "render" is assumed.
-
- Example:
-
- Content-Disposition: session
-
-
-
-Rosenberg, et. al. Standards Track [Page 168]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-20.12 Content-Encoding
-
- The Content-Encoding header field is used as a modifier to the
- "media-type". When present, its value indicates what additional
- content codings have been applied to the entity-body, and thus what
- decoding mechanisms MUST be applied in order to obtain the media-type
- referenced by the Content-Type header field. Content-Encoding is
- primarily used to allow a body to be compressed without losing the
- identity of its underlying media type.
-
- If multiple encodings have been applied to an entity-body, the
- content codings MUST be listed in the order in which they were
- applied.
-
- All content-coding values are case-insensitive. IANA acts as a
- registry for content-coding value tokens. See [H3.5] for a
- definition of the syntax for content-coding.
-
- Clients MAY apply content encodings to the body in requests. A
- server MAY apply content encodings to the bodies in responses. The
- server MUST only use encodings listed in the Accept-Encoding header
- field in the request.
-
- The compact form of the Content-Encoding header field is e.
- Examples:
-
- Content-Encoding: gzip
- e: tar
-
-20.13 Content-Language
-
- See [H14.12]. Example:
-
- Content-Language: fr
-
-20.14 Content-Length
-
- The Content-Length header field indicates the size of the message-
- body, in decimal number of octets, sent to the recipient.
- Applications SHOULD use this field to indicate the size of the
- message-body to be transferred, regardless of the media type of the
- entity. If a stream-based protocol (such as TCP) is used as
- transport, the header field MUST be used.
-
- The size of the message-body does not include the CRLF separating
- header fields and body. Any Content-Length greater than or equal to
- zero is a valid value. If no body is present in a message, then the
- Content-Length header field value MUST be set to zero.
-
-
-
-Rosenberg, et. al. Standards Track [Page 169]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The ability to omit Content-Length simplifies the creation of
- cgi-like scripts that dynamically generate responses.
-
- The compact form of the header field is l.
-
- Examples:
-
- Content-Length: 349
- l: 173
-
-20.15 Content-Type
-
- The Content-Type header field indicates the media type of the
- message-body sent to the recipient. The "media-type" element is
- defined in [H3.7]. The Content-Type header field MUST be present if
- the body is not empty. If the body is empty, and a Content-Type
- header field is present, it indicates that the body of the specific
- type has zero length (for example, an empty audio file).
-
- The compact form of the header field is c.
-
- Examples:
-
- Content-Type: application/sdp
- c: text/html; charset=ISO-8859-4
-
-20.16 CSeq
-
- A CSeq header field in a request contains a single decimal sequence
- number and the request method. The sequence number MUST be
- expressible as a 32-bit unsigned integer. The method part of CSeq is
- case-sensitive. The CSeq header field serves to order transactions
- within a dialog, to provide a means to uniquely identify
- transactions, and to differentiate between new requests and request
- retransmissions. Two CSeq header fields are considered equal if the
- sequence number and the request method are identical. Example:
-
- CSeq: 4711 INVITE
-
-20.17 Date
-
- The Date header field contains the date and time. Unlike HTTP/1.1,
- SIP only supports the most recent RFC 1123 [20] format for dates. As
- in [H3.3], SIP restricts the time zone in SIP-date to "GMT", while
- RFC 1123 allows any time zone. An RFC 1123 date is case-sensitive.
-
- The Date header field reflects the time when the request or response
- is first sent.
-
-
-
-Rosenberg, et. al. Standards Track [Page 170]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The Date header field can be used by simple end systems without a
- battery-backed clock to acquire a notion of current time.
- However, in its GMT form, it requires clients to know their offset
- from GMT.
-
- Example:
-
- Date: Sat, 13 Nov 2010 23:29:00 GMT
-
-20.18 Error-Info
-
- The Error-Info header field provides a pointer to additional
- information about the error status response.
-
- SIP UACs have user interface capabilities ranging from pop-up
- windows and audio on PC softclients to audio-only on "black"
- phones or endpoints connected via gateways. Rather than forcing a
- server generating an error to choose between sending an error
- status code with a detailed reason phrase and playing an audio
- recording, the Error-Info header field allows both to be sent.
- The UAC then has the choice of which error indicator to render to
- the caller.
-
- A UAC MAY treat a SIP or SIPS URI in an Error-Info header field as if
- it were a Contact in a redirect and generate a new INVITE, resulting
- in a recorded announcement session being established. A non-SIP URI
- MAY be rendered to the user.
-
- Examples:
-
- SIP/2.0 404 The number you have dialed is not in service
- Error-Info: <sip:not-in-service-recording@atlanta.com>
-
-20.19 Expires
-
- The Expires header field gives the relative time after which the
- message (or content) expires.
-
- The precise meaning of this is method dependent.
-
- The expiration time in an INVITE does not affect the duration of the
- actual session that may result from the invitation. Session
- description protocols may offer the ability to express time limits on
- the session duration, however.
-
- The value of this field is an integral number of seconds (in decimal)
- between 0 and (2**32)-1, measured from the receipt of the request.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 171]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Example:
-
- Expires: 5
-
-20.20 From
-
- The From header field indicates the initiator of the request. This
- may be different from the initiator of the dialog. Requests sent by
- the callee to the caller use the callee's address in the From header
- field.
-
- The optional "display-name" is meant to be rendered by a human user
- interface. A system SHOULD use the display name "Anonymous" if the
- identity of the client is to remain hidden. Even if the "display-
- name" is empty, the "name-addr" form MUST be used if the "addr-spec"
- contains a comma, question mark, or semicolon. Syntax issues are
- discussed in Section 7.3.1.
-
- Two From header fields are equivalent if their URIs match, and their
- parameters match. Extension parameters in one header field, not
- present in the other are ignored for the purposes of comparison. This
- means that the display name and presence or absence of angle brackets
- do not affect matching.
-
- See Section 20.10 for the rules for parsing a display name, URI and
- URI parameters, and header field parameters.
-
- The compact form of the From header field is f.
-
- Examples:
-
- From: "A. G. Bell" <sip:agb@bell-telephone.com> ;tag=a48s
- From: sip:+12125551212@server.phone2net.com;tag=887s
- f: Anonymous <sip:c8oqz84zk7z@privacy.org>;tag=hyh8
-
-20.21 In-Reply-To
-
- The In-Reply-To header field enumerates the Call-IDs that this call
- references or returns. These Call-IDs may have been cached by the
- client then included in this header field in a return call.
-
- This allows automatic call distribution systems to route return
- calls to the originator of the first call. This also allows
- callees to filter calls, so that only return calls for calls they
- originated will be accepted. This field is not a substitute for
- request authentication.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 172]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Example:
-
- In-Reply-To: 70710@saturn.bell-tel.com, 17320@saturn.bell-tel.com
-
-20.22 Max-Forwards
-
- The Max-Forwards header field must be used with any SIP method to
- limit the number of proxies or gateways that can forward the request
- to the next downstream server. This can also be useful when the
- client is attempting to trace a request chain that appears to be
- failing or looping in mid-chain.
-
- The Max-Forwards value is an integer in the range 0-255 indicating
- the remaining number of times this request message is allowed to be
- forwarded. This count is decremented by each server that forwards
- the request. The recommended initial value is 70.
-
- This header field should be inserted by elements that can not
- otherwise guarantee loop detection. For example, a B2BUA should
- insert a Max-Forwards header field.
-
- Example:
-
- Max-Forwards: 6
-
-20.23 Min-Expires
-
- The Min-Expires header field conveys the minimum refresh interval
- supported for soft-state elements managed by that server. This
- includes Contact header fields that are stored by a registrar. The
- header field contains a decimal integer number of seconds from 0 to
- (2**32)-1. The use of the header field in a 423 (Interval Too Brief)
- response is described in Sections 10.2.8, 10.3, and 21.4.17.
-
- Example:
-
- Min-Expires: 60
-
-20.24 MIME-Version
-
- See [H19.4.1].
-
- Example:
-
- MIME-Version: 1.0
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 173]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-20.25 Organization
-
- The Organization header field conveys the name of the organization to
- which the SIP element issuing the request or response belongs.
-
- The field MAY be used by client software to filter calls.
-
- Example:
-
- Organization: Boxes by Bob
-
-20.26 Priority
-
- The Priority header field indicates the urgency of the request as
- perceived by the client. The Priority header field describes the
- priority that the SIP request should have to the receiving human or
- its agent. For example, it may be factored into decisions about call
- routing and acceptance. For these decisions, a message containing no
- Priority header field SHOULD be treated as if it specified a Priority
- of "normal". The Priority header field does not influence the use of
- communications resources such as packet forwarding priority in
- routers or access to circuits in PSTN gateways. The header field can
- have the values "non-urgent", "normal", "urgent", and "emergency",
- but additional values can be defined elsewhere. It is RECOMMENDED
- that the value of "emergency" only be used when life, limb, or
- property are in imminent danger. Otherwise, there are no semantics
- defined for this header field.
-
- These are the values of RFC 2076 [38], with the addition of
- "emergency".
-
- Examples:
-
- Subject: A tornado is heading our way!
- Priority: emergency
-
- or
-
- Subject: Weekend plans
- Priority: non-urgent
-
-20.27 Proxy-Authenticate
-
- A Proxy-Authenticate header field value contains an authentication
- challenge.
-
- The use of this header field is defined in [H14.33]. See Section
- 22.3 for further details on its usage.
-
-
-
-Rosenberg, et. al. Standards Track [Page 174]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Example:
-
- Proxy-Authenticate: Digest realm="atlanta.com",
- domain="sip:ss1.carrier.com", qop="auth",
- nonce="f84f1cec41e6cbe5aea9c8e88d359",
- opaque="", stale=FALSE, algorithm=MD5
-
-20.28 Proxy-Authorization
-
- The Proxy-Authorization header field allows the client to identify
- itself (or its user) to a proxy that requires authentication. A
- Proxy-Authorization field value consists of credentials containing
- the authentication information of the user agent for the proxy and/or
- realm of the resource being requested.
-
- See Section 22.3 for a definition of the usage of this header field.
-
- This header field, along with Authorization, breaks the general rules
- about multiple header field names. Although not a comma-separated
- list, this header field name may be present multiple times, and MUST
- NOT be combined into a single header line using the usual rules
- described in Section 7.3.1.
-
- Example:
-
- Proxy-Authorization: Digest username="Alice", realm="atlanta.com",
- nonce="c60f3082ee1212b402a21831ae",
- response="245f23415f11432b3434341c022"
-
-20.29 Proxy-Require
-
- The Proxy-Require header field is used to indicate proxy-sensitive
- features that must be supported by the proxy. See Section 20.32 for
- more details on the mechanics of this message and a usage example.
-
- Example:
-
- Proxy-Require: foo
-
-20.30 Record-Route
-
- The Record-Route header field is inserted by proxies in a request to
- force future requests in the dialog to be routed through the proxy.
-
- Examples of its use with the Route header field are described in
- Sections 16.12.1.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 175]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Example:
-
- Record-Route: <sip:server10.biloxi.com;lr>,
- <sip:bigbox3.site3.atlanta.com;lr>
-
-20.31 Reply-To
-
- The Reply-To header field contains a logical return URI that may be
- different from the From header field. For example, the URI MAY be
- used to return missed calls or unestablished sessions. If the user
- wished to remain anonymous, the header field SHOULD either be omitted
- from the request or populated in such a way that does not reveal any
- private information.
-
- Even if the "display-name" is empty, the "name-addr" form MUST be
- used if the "addr-spec" contains a comma, question mark, or
- semicolon. Syntax issues are discussed in Section 7.3.1.
-
- Example:
-
- Reply-To: Bob <sip:bob@biloxi.com>
-
-20.32 Require
-
- The Require header field is used by UACs to tell UASs about options
- that the UAC expects the UAS to support in order to process the
- request. Although an optional header field, the Require MUST NOT be
- ignored if it is present.
-
- The Require header field contains a list of option tags, described in
- Section 19.2. Each option tag defines a SIP extension that MUST be
- understood to process the request. Frequently, this is used to
- indicate that a specific set of extension header fields need to be
- understood. A UAC compliant to this specification MUST only include
- option tags corresponding to standards-track RFCs.
-
- Example:
-
- Require: 100rel
-
-20.33 Retry-After
-
- The Retry-After header field can be used with a 500 (Server Internal
- Error) or 503 (Service Unavailable) response to indicate how long the
- service is expected to be unavailable to the requesting client and
- with a 404 (Not Found), 413 (Request Entity Too Large), 480
- (Temporarily Unavailable), 486 (Busy Here), 600 (Busy), or 603
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 176]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- (Decline) response to indicate when the called party anticipates
- being available again. The value of this field is a positive integer
- number of seconds (in decimal) after the time of the response.
-
- An optional comment can be used to indicate additional information
- about the time of callback. An optional "duration" parameter
- indicates how long the called party will be reachable starting at the
- initial time of availability. If no duration parameter is given, the
- service is assumed to be available indefinitely.
-
- Examples:
-
- Retry-After: 18000;duration=3600
- Retry-After: 120 (I'm in a meeting)
-
-20.34 Route
-
- The Route header field is used to force routing for a request through
- the listed set of proxies. Examples of the use of the Route header
- field are in Section 16.12.1.
-
- Example:
-
- Route: <sip:bigbox3.site3.atlanta.com;lr>,
- <sip:server10.biloxi.com;lr>
-
-20.35 Server
-
- The Server header field contains information about the software used
- by the UAS to handle the request.
-
- Revealing the specific software version of the server might allow the
- server to become more vulnerable to attacks against software that is
- known to contain security holes. Implementers SHOULD make the Server
- header field a configurable option.
-
- Example:
-
- Server: HomeServer v2
-
-20.36 Subject
-
- The Subject header field provides a summary or indicates the nature
- of the call, allowing call filtering without having to parse the
- session description. The session description does not have to use
- the same subject indication as the invitation.
-
- The compact form of the Subject header field is s.
-
-
-
-Rosenberg, et. al. Standards Track [Page 177]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Example:
-
- Subject: Need more boxes
- s: Tech Support
-
-20.37 Supported
-
- The Supported header field enumerates all the extensions supported by
- the UAC or UAS.
-
- The Supported header field contains a list of option tags, described
- in Section 19.2, that are understood by the UAC or UAS. A UA
- compliant to this specification MUST only include option tags
- corresponding to standards-track RFCs. If empty, it means that no
- extensions are supported.
-
- The compact form of the Supported header field is k.
-
- Example:
-
- Supported: 100rel
-
-20.38 Timestamp
-
- The Timestamp header field describes when the UAC sent the request to
- the UAS.
-
- See Section 8.2.6 for details on how to generate a response to a
- request that contains the header field. Although there is no
- normative behavior defined here that makes use of the header, it
- allows for extensions or SIP applications to obtain RTT estimates.
-
- Example:
-
- Timestamp: 54
-
-20.39 To
-
- The To header field specifies the logical recipient of the request.
-
- The optional "display-name" is meant to be rendered by a human-user
- interface. The "tag" parameter serves as a general mechanism for
- dialog identification.
-
- See Section 19.3 for details of the "tag" parameter.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 178]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Comparison of To header fields for equality is identical to
- comparison of From header fields. See Section 20.10 for the rules
- for parsing a display name, URI and URI parameters, and header field
- parameters.
-
- The compact form of the To header field is t.
-
- The following are examples of valid To header fields:
-
- To: The Operator <sip:operator@cs.columbia.edu>;tag=287447
- t: sip:+12125551212@server.phone2net.com
-
-20.40 Unsupported
-
- The Unsupported header field lists the features not supported by the
- UAS. See Section 20.32 for motivation.
-
- Example:
-
- Unsupported: foo
-
-20.41 User-Agent
-
- The User-Agent header field contains information about the UAC
- originating the request. The semantics of this header field are
- defined in [H14.43].
-
- Revealing the specific software version of the user agent might allow
- the user agent to become more vulnerable to attacks against software
- that is known to contain security holes. Implementers SHOULD make
- the User-Agent header field a configurable option.
-
- Example:
-
- User-Agent: Softphone Beta1.5
-
-20.42 Via
-
- The Via header field indicates the path taken by the request so far
- and indicates the path that should be followed in routing responses.
- The branch ID parameter in the Via header field values serves as a
- transaction identifier, and is used by proxies to detect loops.
-
- A Via header field value contains the transport protocol used to send
- the message, the client's host name or network address, and possibly
- the port number at which it wishes to receive responses. A Via
- header field value can also contain parameters such as "maddr",
- "ttl", "received", and "branch", whose meaning and use are described
-
-
-
-Rosenberg, et. al. Standards Track [Page 179]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- in other sections. For implementations compliant to this
- specification, the value of the branch parameter MUST start with the
- magic cookie "z9hG4bK", as discussed in Section 8.1.1.7.
-
- Transport protocols defined here are "UDP", "TCP", "TLS", and "SCTP".
- "TLS" means TLS over TCP. When a request is sent to a SIPS URI, the
- protocol still indicates "SIP", and the transport protocol is TLS.
-
-Via: SIP/2.0/UDP erlang.bell-telephone.com:5060;branch=z9hG4bK87asdks7
-Via: SIP/2.0/UDP 192.0.2.1:5060 ;received=192.0.2.207
- ;branch=z9hG4bK77asjd
-
- The compact form of the Via header field is v.
-
- In this example, the message originated from a multi-homed host with
- two addresses, 192.0.2.1 and 192.0.2.207. The sender guessed wrong
- as to which network interface would be used. Erlang.bell-
- telephone.com noticed the mismatch and added a parameter to the
- previous hop's Via header field value, containing the address that
- the packet actually came from.
-
- The host or network address and port number are not required to
- follow the SIP URI syntax. Specifically, LWS on either side of the
- ":" or "/" is allowed, as shown here:
-
- Via: SIP / 2.0 / UDP first.example.com: 4000;ttl=16
- ;maddr=224.2.0.1 ;branch=z9hG4bKa7c6a8dlze.1
-
- Even though this specification mandates that the branch parameter be
- present in all requests, the BNF for the header field indicates that
- it is optional. This allows interoperation with RFC 2543 elements,
- which did not have to insert the branch parameter.
-
- Two Via header fields are equal if their sent-protocol and sent-by
- fields are equal, both have the same set of parameters, and the
- values of all parameters are equal.
-
-20.43 Warning
-
- The Warning header field is used to carry additional information
- about the status of a response. Warning header field values are sent
- with responses and contain a three-digit warning code, host name, and
- warning text.
-
- The "warn-text" should be in a natural language that is most likely
- to be intelligible to the human user receiving the response. This
- decision can be based on any available knowledge, such as the
- location of the user, the Accept-Language field in a request, or the
-
-
-
-Rosenberg, et. al. Standards Track [Page 180]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Content-Language field in a response. The default language is i-
- default [21].
-
- The currently-defined "warn-code"s are listed below, with a
- recommended warn-text in English and a description of their meaning.
- These warnings describe failures induced by the session description.
- The first digit of warning codes beginning with "3" indicates
- warnings specific to SIP. Warnings 300 through 329 are reserved for
- indicating problems with keywords in the session description, 330
- through 339 are warnings related to basic network services requested
- in the session description, 370 through 379 are warnings related to
- quantitative QoS parameters requested in the session description, and
- 390 through 399 are miscellaneous warnings that do not fall into one
- of the above categories.
-
- 300 Incompatible network protocol: One or more network protocols
- contained in the session description are not available.
-
- 301 Incompatible network address formats: One or more network
- address formats contained in the session description are not
- available.
-
- 302 Incompatible transport protocol: One or more transport
- protocols described in the session description are not
- available.
-
- 303 Incompatible bandwidth units: One or more bandwidth
- measurement units contained in the session description were
- not understood.
-
- 304 Media type not available: One or more media types contained in
- the session description are not available.
-
- 305 Incompatible media format: One or more media formats contained
- in the session description are not available.
-
- 306 Attribute not understood: One or more of the media attributes
- in the session description are not supported.
-
- 307 Session description parameter not understood: A parameter
- other than those listed above was not understood.
-
- 330 Multicast not available: The site where the user is located
- does not support multicast.
-
- 331 Unicast not available: The site where the user is located does
- not support unicast communication (usually due to the presence
- of a firewall).
-
-
-
-Rosenberg, et. al. Standards Track [Page 181]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- 370 Insufficient bandwidth: The bandwidth specified in the session
- description or defined by the media exceeds that known to be
- available.
-
- 399 Miscellaneous warning: The warning text can include arbitrary
- information to be presented to a human user or logged. A
- system receiving this warning MUST NOT take any automated
- action.
-
- 1xx and 2xx have been taken by HTTP/1.1.
-
- Additional "warn-code"s can be defined through IANA, as defined in
- Section 27.2.
-
- Examples:
-
- Warning: 307 isi.edu "Session parameter 'foo' not understood"
- Warning: 301 isi.edu "Incompatible network address type 'E.164'"
-
-20.44 WWW-Authenticate
-
- A WWW-Authenticate header field value contains an authentication
- challenge. See Section 22.2 for further details on its usage.
-
- Example:
-
- WWW-Authenticate: Digest realm="atlanta.com",
- domain="sip:boxesbybob.com", qop="auth",
- nonce="f84f1cec41e6cbe5aea9c8e88d359",
- opaque="", stale=FALSE, algorithm=MD5
-
-21 Response Codes
-
- The response codes are consistent with, and extend, HTTP/1.1 response
- codes. Not all HTTP/1.1 response codes are appropriate, and only
- those that are appropriate are given here. Other HTTP/1.1 response
- codes SHOULD NOT be used. Also, SIP defines a new class, 6xx.
-
-21.1 Provisional 1xx
-
- Provisional responses, also known as informational responses,
- indicate that the server contacted is performing some further action
- and does not yet have a definitive response. A server sends a 1xx
- response if it expects to take more than 200 ms to obtain a final
- response. Note that 1xx responses are not transmitted reliably.
- They never cause the client to send an ACK. Provisional (1xx)
- responses MAY contain message bodies, including session descriptions.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 182]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.1.1 100 Trying
-
- This response indicates that the request has been received by the
- next-hop server and that some unspecified action is being taken on
- behalf of this call (for example, a database is being consulted).
- This response, like all other provisional responses, stops
- retransmissions of an INVITE by a UAC. The 100 (Trying) response is
- different from other provisional responses, in that it is never
- forwarded upstream by a stateful proxy.
-
-21.1.2 180 Ringing
-
- The UA receiving the INVITE is trying to alert the user. This
- response MAY be used to initiate local ringback.
-
-21.1.3 181 Call Is Being Forwarded
-
- A server MAY use this status code to indicate that the call is being
- forwarded to a different set of destinations.
-
-21.1.4 182 Queued
-
- The called party is temporarily unavailable, but the server has
- decided to queue the call rather than reject it. When the callee
- becomes available, it will return the appropriate final status
- response. The reason phrase MAY give further details about the
- status of the call, for example, "5 calls queued; expected waiting
- time is 15 minutes". The server MAY issue several 182 (Queued)
- responses to update the caller about the status of the queued call.
-
-21.1.5 183 Session Progress
-
- The 183 (Session Progress) response is used to convey information
- about the progress of the call that is not otherwise classified. The
- Reason-Phrase, header fields, or message body MAY be used to convey
- more details about the call progress.
-
-21.2 Successful 2xx
-
- The request was successful.
-
-21.2.1 200 OK
-
- The request has succeeded. The information returned with the
- response depends on the method used in the request.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 183]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.3 Redirection 3xx
-
- 3xx responses give information about the user's new location, or
- about alternative services that might be able to satisfy the call.
-
-21.3.1 300 Multiple Choices
-
- The address in the request resolved to several choices, each with its
- own specific location, and the user (or UA) can select a preferred
- communication end point and redirect its request to that location.
-
- The response MAY include a message body containing a list of resource
- characteristics and location(s) from which the user or UA can choose
- the one most appropriate, if allowed by the Accept request header
- field. However, no MIME types have been defined for this message
- body.
-
- The choices SHOULD also be listed as Contact fields (Section 20.10).
- Unlike HTTP, the SIP response MAY contain several Contact fields or a
- list of addresses in a Contact field. UAs MAY use the Contact header
- field value for automatic redirection or MAY ask the user to confirm
- a choice. However, this specification does not define any standard
- for such automatic selection.
-
- This status response is appropriate if the callee can be reached
- at several different locations and the server cannot or prefers
- not to proxy the request.
-
-21.3.2 301 Moved Permanently
-
- The user can no longer be found at the address in the Request-URI,
- and the requesting client SHOULD retry at the new address given by
- the Contact header field (Section 20.10). The requestor SHOULD
- update any local directories, address books, and user location caches
- with this new value and redirect future requests to the address(es)
- listed.
-
-21.3.3 302 Moved Temporarily
-
- The requesting client SHOULD retry the request at the new address(es)
- given by the Contact header field (Section 20.10). The Request-URI
- of the new request uses the value of the Contact header field in the
- response.
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 184]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The duration of the validity of the Contact URI can be indicated
- through an Expires (Section 20.19) header field or an expires
- parameter in the Contact header field. Both proxies and UAs MAY
- cache this URI for the duration of the expiration time. If there is
- no explicit expiration time, the address is only valid once for
- recursing, and MUST NOT be cached for future transactions.
-
- If the URI cached from the Contact header field fails, the Request-
- URI from the redirected request MAY be tried again a single time.
-
- The temporary URI may have become out-of-date sooner than the
- expiration time, and a new temporary URI may be available.
-
-21.3.4 305 Use Proxy
-
- The requested resource MUST be accessed through the proxy given by
- the Contact field. The Contact field gives the URI of the proxy.
- The recipient is expected to repeat this single request via the
- proxy. 305 (Use Proxy) responses MUST only be generated by UASs.
-
-21.3.5 380 Alternative Service
-
- The call was not successful, but alternative services are possible.
-
- The alternative services are described in the message body of the
- response. Formats for such bodies are not defined here, and may be
- the subject of future standardization.
-
-21.4 Request Failure 4xx
-
- 4xx responses are definite failure responses from a particular
- server. The client SHOULD NOT retry the same request without
- modification (for example, adding appropriate authorization).
- However, the same request to a different server might be successful.
-
-21.4.1 400 Bad Request
-
- The request could not be understood due to malformed syntax. The
- Reason-Phrase SHOULD identify the syntax problem in more detail, for
- example, "Missing Call-ID header field".
-
-21.4.2 401 Unauthorized
-
- The request requires user authentication. This response is issued by
- UASs and registrars, while 407 (Proxy Authentication Required) is
- used by proxy servers.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 185]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.4.3 402 Payment Required
-
- Reserved for future use.
-
-21.4.4 403 Forbidden
-
- The server understood the request, but is refusing to fulfill it.
- Authorization will not help, and the request SHOULD NOT be repeated.
-
-21.4.5 404 Not Found
-
- The server has definitive information that the user does not exist at
- the domain specified in the Request-URI. This status is also
- returned if the domain in the Request-URI does not match any of the
- domains handled by the recipient of the request.
-
-21.4.6 405 Method Not Allowed
-
- The method specified in the Request-Line is understood, but not
- allowed for the address identified by the Request-URI.
-
- The response MUST include an Allow header field containing a list of
- valid methods for the indicated address.
-
-21.4.7 406 Not Acceptable
-
- The resource identified by the request is only capable of generating
- response entities that have content characteristics not acceptable
- according to the Accept header field sent in the request.
-
-21.4.8 407 Proxy Authentication Required
-
- This code is similar to 401 (Unauthorized), but indicates that the
- client MUST first authenticate itself with the proxy. SIP access
- authentication is explained in Sections 26 and 22.3.
-
- This status code can be used for applications where access to the
- communication channel (for example, a telephony gateway) rather than
- the callee requires authentication.
-
-21.4.9 408 Request Timeout
-
- The server could not produce a response within a suitable amount of
- time, for example, if it could not determine the location of the user
- in time. The client MAY repeat the request without modifications at
- any later time.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 186]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.4.10 410 Gone
-
- The requested resource is no longer available at the server and no
- forwarding address is known. This condition is expected to be
- considered permanent. If the server does not know, or has no
- facility to determine, whether or not the condition is permanent, the
- status code 404 (Not Found) SHOULD be used instead.
-
-21.4.11 413 Request Entity Too Large
-
- The server is refusing to process a request because the request
- entity-body is larger than the server is willing or able to process.
- The server MAY close the connection to prevent the client from
- continuing the request.
-
- If the condition is temporary, the server SHOULD include a Retry-
- After header field to indicate that it is temporary and after what
- time the client MAY try again.
-
-21.4.12 414 Request-URI Too Long
-
- The server is refusing to service the request because the Request-URI
- is longer than the server is willing to interpret.
-
-21.4.13 415 Unsupported Media Type
-
- The server is refusing to service the request because the message
- body of the request is in a format not supported by the server for
- the requested method. The server MUST return a list of acceptable
- formats using the Accept, Accept-Encoding, or Accept-Language header
- field, depending on the specific problem with the content. UAC
- processing of this response is described in Section 8.1.3.5.
-
-21.4.14 416 Unsupported URI Scheme
-
- The server cannot process the request because the scheme of the URI
- in the Request-URI is unknown to the server. Client processing of
- this response is described in Section 8.1.3.5.
-
-21.4.15 420 Bad Extension
-
- The server did not understand the protocol extension specified in a
- Proxy-Require (Section 20.29) or Require (Section 20.32) header
- field. The server MUST include a list of the unsupported extensions
- in an Unsupported header field in the response. UAC processing of
- this response is described in Section 8.1.3.5.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 187]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.4.16 421 Extension Required
-
- The UAS needs a particular extension to process the request, but this
- extension is not listed in a Supported header field in the request.
- Responses with this status code MUST contain a Require header field
- listing the required extensions.
-
- A UAS SHOULD NOT use this response unless it truly cannot provide any
- useful service to the client. Instead, if a desirable extension is
- not listed in the Supported header field, servers SHOULD process the
- request using baseline SIP capabilities and any extensions supported
- by the client.
-
-21.4.17 423 Interval Too Brief
-
- The server is rejecting the request because the expiration time of
- the resource refreshed by the request is too short. This response
- can be used by a registrar to reject a registration whose Contact
- header field expiration time was too small. The use of this response
- and the related Min-Expires header field are described in Sections
- 10.2.8, 10.3, and 20.23.
-
-21.4.18 480 Temporarily Unavailable
-
- The callee's end system was contacted successfully but the callee is
- currently unavailable (for example, is not logged in, logged in but
- in a state that precludes communication with the callee, or has
- activated the "do not disturb" feature). The response MAY indicate a
- better time to call in the Retry-After header field. The user could
- also be available elsewhere (unbeknownst to this server). The reason
- phrase SHOULD indicate a more precise cause as to why the callee is
- unavailable. This value SHOULD be settable by the UA. Status 486
- (Busy Here) MAY be used to more precisely indicate a particular
- reason for the call failure.
-
- This status is also returned by a redirect or proxy server that
- recognizes the user identified by the Request-URI, but does not
- currently have a valid forwarding location for that user.
-
-21.4.19 481 Call/Transaction Does Not Exist
-
- This status indicates that the UAS received a request that does not
- match any existing dialog or transaction.
-
-21.4.20 482 Loop Detected
-
- The server has detected a loop (Section 16.3 Item 4).
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 188]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.4.21 483 Too Many Hops
-
- The server received a request that contains a Max-Forwards (Section
- 20.22) header field with the value zero.
-
-21.4.22 484 Address Incomplete
-
- The server received a request with a Request-URI that was incomplete.
- Additional information SHOULD be provided in the reason phrase.
-
- This status code allows overlapped dialing. With overlapped
- dialing, the client does not know the length of the dialing
- string. It sends strings of increasing lengths, prompting the
- user for more input, until it no longer receives a 484 (Address
- Incomplete) status response.
-
-21.4.23 485 Ambiguous
-
- The Request-URI was ambiguous. The response MAY contain a listing of
- possible unambiguous addresses in Contact header fields. Revealing
- alternatives can infringe on privacy of the user or the organization.
- It MUST be possible to configure a server to respond with status 404
- (Not Found) or to suppress the listing of possible choices for
- ambiguous Request-URIs.
-
- Example response to a request with the Request-URI
- sip:lee@example.com:
-
- SIP/2.0 485 Ambiguous
- Contact: Carol Lee <sip:carol.lee@example.com>
- Contact: Ping Lee <sip:p.lee@example.com>
- Contact: Lee M. Foote <sips:lee.foote@example.com>
-
- Some email and voice mail systems provide this functionality. A
- status code separate from 3xx is used since the semantics are
- different: for 300, it is assumed that the same person or service
- will be reached by the choices provided. While an automated
- choice or sequential search makes sense for a 3xx response, user
- intervention is required for a 485 (Ambiguous) response.
-
-21.4.24 486 Busy Here
-
- The callee's end system was contacted successfully, but the callee is
- currently not willing or able to take additional calls at this end
- system. The response MAY indicate a better time to call in the
- Retry-After header field. The user could also be available
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 189]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- elsewhere, such as through a voice mail service. Status 600 (Busy
- Everywhere) SHOULD be used if the client knows that no other end
- system will be able to accept this call.
-
-21.4.25 487 Request Terminated
-
- The request was terminated by a BYE or CANCEL request. This response
- is never returned for a CANCEL request itself.
-
-21.4.26 488 Not Acceptable Here
-
- The response has the same meaning as 606 (Not Acceptable), but only
- applies to the specific resource addressed by the Request-URI and the
- request may succeed elsewhere.
-
- A message body containing a description of media capabilities MAY be
- present in the response, which is formatted according to the Accept
- header field in the INVITE (or application/sdp if not present), the
- same as a message body in a 200 (OK) response to an OPTIONS request.
-
-21.4.27 491 Request Pending
-
- The request was received by a UAS that had a pending request within
- the same dialog. Section 14.2 describes how such "glare" situations
- are resolved.
-
-21.4.28 493 Undecipherable
-
- The request was received by a UAS that contained an encrypted MIME
- body for which the recipient does not possess or will not provide an
- appropriate decryption key. This response MAY have a single body
- containing an appropriate public key that should be used to encrypt
- MIME bodies sent to this UA. Details of the usage of this response
- code can be found in Section 23.2.
-
-21.5 Server Failure 5xx
-
- 5xx responses are failure responses given when a server itself has
- erred.
-
-21.5.1 500 Server Internal Error
-
- The server encountered an unexpected condition that prevented it from
- fulfilling the request. The client MAY display the specific error
- condition and MAY retry the request after several seconds.
-
- If the condition is temporary, the server MAY indicate when the
- client may retry the request using the Retry-After header field.
-
-
-
-Rosenberg, et. al. Standards Track [Page 190]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.5.2 501 Not Implemented
-
- The server does not support the functionality required to fulfill the
- request. This is the appropriate response when a UAS does not
- recognize the request method and is not capable of supporting it for
- any user. (Proxies forward all requests regardless of method.)
-
- Note that a 405 (Method Not Allowed) is sent when the server
- recognizes the request method, but that method is not allowed or
- supported.
-
-21.5.3 502 Bad Gateway
-
- The server, while acting as a gateway or proxy, received an invalid
- response from the downstream server it accessed in attempting to
- fulfill the request.
-
-21.5.4 503 Service Unavailable
-
- The server is temporarily unable to process the request due to a
- temporary overloading or maintenance of the server. The server MAY
- indicate when the client should retry the request in a Retry-After
- header field. If no Retry-After is given, the client MUST act as if
- it had received a 500 (Server Internal Error) response.
-
- A client (proxy or UAC) receiving a 503 (Service Unavailable) SHOULD
- attempt to forward the request to an alternate server. It SHOULD NOT
- forward any other requests to that server for the duration specified
- in the Retry-After header field, if present.
-
- Servers MAY refuse the connection or drop the request instead of
- responding with 503 (Service Unavailable).
-
-21.5.5 504 Server Time-out
-
- The server did not receive a timely response from an external server
- it accessed in attempting to process the request. 408 (Request
- Timeout) should be used instead if there was no response within the
- period specified in the Expires header field from the upstream
- server.
-
-21.5.6 505 Version Not Supported
-
- The server does not support, or refuses to support, the SIP protocol
- version that was used in the request. The server is indicating that
- it is unable or unwilling to complete the request using the same
- major version as the client, other than with this error message.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 191]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-21.5.7 513 Message Too Large
-
- The server was unable to process the request since the message length
- exceeded its capabilities.
-
-21.6 Global Failures 6xx
-
- 6xx responses indicate that a server has definitive information about
- a particular user, not just the particular instance indicated in the
- Request-URI.
-
-21.6.1 600 Busy Everywhere
-
- The callee's end system was contacted successfully but the callee is
- busy and does not wish to take the call at this time. The response
- MAY indicate a better time to call in the Retry-After header field.
- If the callee does not wish to reveal the reason for declining the
- call, the callee uses status code 603 (Decline) instead. This status
- response is returned only if the client knows that no other end point
- (such as a voice mail system) will answer the request. Otherwise,
- 486 (Busy Here) should be returned.
-
-21.6.2 603 Decline
-
- The callee's machine was successfully contacted but the user
- explicitly does not wish to or cannot participate. The response MAY
- indicate a better time to call in the Retry-After header field. This
- status response is returned only if the client knows that no other
- end point will answer the request.
-
-21.6.3 604 Does Not Exist Anywhere
-
- The server has authoritative information that the user indicated in
- the Request-URI does not exist anywhere.
-
-21.6.4 606 Not Acceptable
-
- The user's agent was contacted successfully but some aspects of the
- session description such as the requested media, bandwidth, or
- addressing style were not acceptable.
-
- A 606 (Not Acceptable) response means that the user wishes to
- communicate, but cannot adequately support the session described.
- The 606 (Not Acceptable) response MAY contain a list of reasons in a
- Warning header field describing why the session described cannot be
- supported. Warning reason codes are listed in Section 20.43.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 192]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- A message body containing a description of media capabilities MAY be
- present in the response, which is formatted according to the Accept
- header field in the INVITE (or application/sdp if not present), the
- same as a message body in a 200 (OK) response to an OPTIONS request.
-
- It is hoped that negotiation will not frequently be needed, and when
- a new user is being invited to join an already existing conference,
- negotiation may not be possible. It is up to the invitation
- initiator to decide whether or not to act on a 606 (Not Acceptable)
- response.
-
- This status response is returned only if the client knows that no
- other end point will answer the request.
-
-22 Usage of HTTP Authentication
-
- SIP provides a stateless, challenge-based mechanism for
- authentication that is based on authentication in HTTP. Any time
- that a proxy server or UA receives a request (with the exceptions
- given in Section 22.1), it MAY challenge the initiator of the request
- to provide assurance of its identity. Once the originator has been
- identified, the recipient of the request SHOULD ascertain whether or
- not this user is authorized to make the request in question. No
- authorization systems are recommended or discussed in this document.
-
- The "Digest" authentication mechanism described in this section
- provides message authentication and replay protection only, without
- message integrity or confidentiality. Protective measures above and
- beyond those provided by Digest need to be taken to prevent active
- attackers from modifying SIP requests and responses.
-
- Note that due to its weak security, the usage of "Basic"
- authentication has been deprecated. Servers MUST NOT accept
- credentials using the "Basic" authorization scheme, and servers also
- MUST NOT challenge with "Basic". This is a change from RFC 2543.
-
-22.1 Framework
-
- The framework for SIP authentication closely parallels that of HTTP
- (RFC 2617 [17]). In particular, the BNF for auth-scheme, auth-param,
- challenge, realm, realm-value, and credentials is identical (although
- the usage of "Basic" as a scheme is not permitted). In SIP, a UAS
- uses the 401 (Unauthorized) response to challenge the identity of a
- UAC. Additionally, registrars and redirect servers MAY make use of
- 401 (Unauthorized) responses for authentication, but proxies MUST
- NOT, and instead MAY use the 407 (Proxy Authentication Required)
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 193]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- response. The requirements for inclusion of the Proxy-Authenticate,
- Proxy-Authorization, WWW-Authenticate, and Authorization in the
- various messages are identical to those described in RFC 2617 [17].
-
- Since SIP does not have the concept of a canonical root URL, the
- notion of protection spaces is interpreted differently in SIP. The
- realm string alone defines the protection domain. This is a change
- from RFC 2543, in which the Request-URI and the realm together
- defined the protection domain.
-
- This previous definition of protection domain caused some amount
- of confusion since the Request-URI sent by the UAC and the
- Request-URI received by the challenging server might be different,
- and indeed the final form of the Request-URI might not be known to
- the UAC. Also, the previous definition depended on the presence
- of a SIP URI in the Request-URI and seemed to rule out alternative
- URI schemes (for example, the tel URL).
-
- Operators of user agents or proxy servers that will authenticate
- received requests MUST adhere to the following guidelines for
- creation of a realm string for their server:
-
- o Realm strings MUST be globally unique. It is RECOMMENDED that
- a realm string contain a hostname or domain name, following the
- recommendation in Section 3.2.1 of RFC 2617 [17].
-
- o Realm strings SHOULD present a human-readable identifier that
- can be rendered to a user.
-
- For example:
-
- INVITE sip:bob@biloxi.com SIP/2.0
- Authorization: Digest realm="biloxi.com", <...>
-
- Generally, SIP authentication is meaningful for a specific realm, a
- protection domain. Thus, for Digest authentication, each such
- protection domain has its own set of usernames and passwords. If a
- server does not require authentication for a particular request, it
- MAY accept a default username, "anonymous", which has no password
- (password of ""). Similarly, UACs representing many users, such as
- PSTN gateways, MAY have their own device-specific username and
- password, rather than accounts for particular users, for their realm.
-
- While a server can legitimately challenge most SIP requests, there
- are two requests defined by this document that require special
- handling for authentication: ACK and CANCEL.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 194]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Under an authentication scheme that uses responses to carry values
- used to compute nonces (such as Digest), some problems come up for
- any requests that take no response, including ACK. For this reason,
- any credentials in the INVITE that were accepted by a server MUST be
- accepted by that server for the ACK. UACs creating an ACK message
- will duplicate all of the Authorization and Proxy-Authorization
- header field values that appeared in the INVITE to which the ACK
- corresponds. Servers MUST NOT attempt to challenge an ACK.
-
- Although the CANCEL method does take a response (a 2xx), servers MUST
- NOT attempt to challenge CANCEL requests since these requests cannot
- be resubmitted. Generally, a CANCEL request SHOULD be accepted by a
- server if it comes from the same hop that sent the request being
- canceled (provided that some sort of transport or network layer
- security association, as described in Section 26.2.1, is in place).
-
- When a UAC receives a challenge, it SHOULD render to the user the
- contents of the "realm" parameter in the challenge (which appears in
- either a WWW-Authenticate header field or Proxy-Authenticate header
- field) if the UAC device does not already know of a credential for
- the realm in question. A service provider that pre-configures UAs
- with credentials for its realm should be aware that users will not
- have the opportunity to present their own credentials for this realm
- when challenged at a pre-configured device.
-
- Finally, note that even if a UAC can locate credentials that are
- associated with the proper realm, the potential exists that these
- credentials may no longer be valid or that the challenging server
- will not accept these credentials for whatever reason (especially
- when "anonymous" with no password is submitted). In this instance a
- server may repeat its challenge, or it may respond with a 403
- Forbidden. A UAC MUST NOT re-attempt requests with the credentials
- that have just been rejected (though the request may be retried if
- the nonce was stale).
-
-22.2 User-to-User Authentication
-
- When a UAS receives a request from a UAC, the UAS MAY authenticate
- the originator before the request is processed. If no credentials
- (in the Authorization header field) are provided in the request, the
- UAS can challenge the originator to provide credentials by rejecting
- the request with a 401 (Unauthorized) status code.
-
- The WWW-Authenticate response-header field MUST be included in 401
- (Unauthorized) response messages. The field value consists of at
- least one challenge that indicates the authentication scheme(s) and
- parameters applicable to the realm.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 195]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- An example of the WWW-Authenticate header field in a 401 challenge
- is:
-
- WWW-Authenticate: Digest
- realm="biloxi.com",
- qop="auth,auth-int",
- nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
- opaque="5ccc069c403ebaf9f0171e9517f40e41"
-
- When the originating UAC receives the 401 (Unauthorized), it SHOULD,
- if it is able, re-originate the request with the proper credentials.
- The UAC may require input from the originating user before
- proceeding. Once authentication credentials have been supplied
- (either directly by the user, or discovered in an internal keyring),
- UAs SHOULD cache the credentials for a given value of the To header
- field and "realm" and attempt to re-use these values on the next
- request for that destination. UAs MAY cache credentials in any way
- they would like.
-
- If no credentials for a realm can be located, UACs MAY attempt to
- retry the request with a username of "anonymous" and no password (a
- password of "").
-
- Once credentials have been located, any UA that wishes to
- authenticate itself with a UAS or registrar -- usually, but not
- necessarily, after receiving a 401 (Unauthorized) response -- MAY do
- so by including an Authorization header field with the request. The
- Authorization field value consists of credentials containing the
- authentication information of the UA for the realm of the resource
- being requested as well as parameters required in support of
- authentication and replay protection.
-
- An example of the Authorization header field is:
-
- Authorization: Digest username="bob",
- realm="biloxi.com",
- nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
- uri="sip:bob@biloxi.com",
- qop=auth,
- nc=00000001,
- cnonce="0a4f113b",
- response="6629fae49393a05397450978507c4ef1",
- opaque="5ccc069c403ebaf9f0171e9517f40e41"
-
- When a UAC resubmits a request with its credentials after receiving a
- 401 (Unauthorized) or 407 (Proxy Authentication Required) response,
- it MUST increment the CSeq header field value as it would normally
- when sending an updated request.
-
-
-
-Rosenberg, et. al. Standards Track [Page 196]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-22.3 Proxy-to-User Authentication
-
- Similarly, when a UAC sends a request to a proxy server, the proxy
- server MAY authenticate the originator before the request is
- processed. If no credentials (in the Proxy-Authorization header
- field) are provided in the request, the proxy can challenge the
- originator to provide credentials by rejecting the request with a 407
- (Proxy Authentication Required) status code. The proxy MUST populate
- the 407 (Proxy Authentication Required) message with a Proxy-
- Authenticate header field value applicable to the proxy for the
- requested resource.
-
- The use of Proxy-Authenticate and Proxy-Authorization parallel that
- described in [17], with one difference. Proxies MUST NOT add values
- to the Proxy-Authorization header field. All 407 (Proxy
- Authentication Required) responses MUST be forwarded upstream toward
- the UAC following the procedures for any other response. It is the
- UAC's responsibility to add the Proxy-Authorization header field
- value containing credentials for the realm of the proxy that has
- asked for authentication.
-
- If a proxy were to resubmit a request adding a Proxy-Authorization
- header field value, it would need to increment the CSeq in the new
- request. However, this would cause the UAC that submitted the
- original request to discard a response from the UAS, as the CSeq
- value would be different.
-
- When the originating UAC receives the 407 (Proxy Authentication
- Required) it SHOULD, if it is able, re-originate the request with the
- proper credentials. It should follow the same procedures for the
- display of the "realm" parameter that are given above for responding
- to 401.
-
- If no credentials for a realm can be located, UACs MAY attempt to
- retry the request with a username of "anonymous" and no password (a
- password of "").
-
- The UAC SHOULD also cache the credentials used in the re-originated
- request.
-
- The following rule is RECOMMENDED for proxy credential caching:
-
- If a UA receives a Proxy-Authenticate header field value in a 401/407
- response to a request with a particular Call-ID, it should
- incorporate credentials for that realm in all subsequent requests
- that contain the same Call-ID. These credentials MUST NOT be cached
- across dialogs; however, if a UA is configured with the realm of its
- local outbound proxy, when one exists, then the UA MAY cache
-
-
-
-Rosenberg, et. al. Standards Track [Page 197]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- credentials for that realm across dialogs. Note that this does mean
- a future request in a dialog could contain credentials that are not
- needed by any proxy along the Route header path.
-
- Any UA that wishes to authenticate itself to a proxy server --
- usually, but not necessarily, after receiving a 407 (Proxy
- Authentication Required) response -- MAY do so by including a Proxy-
- Authorization header field value with the request. The Proxy-
- Authorization request-header field allows the client to identify
- itself (or its user) to a proxy that requires authentication. The
- Proxy-Authorization header field value consists of credentials
- containing the authentication information of the UA for the proxy
- and/or realm of the resource being requested.
-
- A Proxy-Authorization header field value applies only to the proxy
- whose realm is identified in the "realm" parameter (this proxy may
- previously have demanded authentication using the Proxy-Authenticate
- field). When multiple proxies are used in a chain, a Proxy-
- Authorization header field value MUST NOT be consumed by any proxy
- whose realm does not match the "realm" parameter specified in that
- value.
-
- Note that if an authentication scheme that does not support realms is
- used in the Proxy-Authorization header field, a proxy server MUST
- attempt to parse all Proxy-Authorization header field values to
- determine whether one of them has what the proxy server considers to
- be valid credentials. Because this is potentially very time-
- consuming in large networks, proxy servers SHOULD use an
- authentication scheme that supports realms in the Proxy-Authorization
- header field.
-
- If a request is forked (as described in Section 16.7), various proxy
- servers and/or UAs may wish to challenge the UAC. In this case, the
- forking proxy server is responsible for aggregating these challenges
- into a single response. Each WWW-Authenticate and Proxy-Authenticate
- value received in responses to the forked request MUST be placed into
- the single response that is sent by the forking proxy to the UA; the
- ordering of these header field values is not significant.
-
- When a proxy server issues a challenge in response to a request,
- it will not proxy the request until the UAC has retried the
- request with valid credentials. A forking proxy may forward a
- request simultaneously to multiple proxy servers that require
- authentication, each of which in turn will not forward the request
- until the originating UAC has authenticated itself in their
- respective realm. If the UAC does not provide credentials for
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 198]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- each challenge, the proxy servers that issued the challenges will
- not forward requests to the UA where the destination user might be
- located, and therefore, the virtues of forking are largely lost.
-
- When resubmitting its request in response to a 401 (Unauthorized) or
- 407 (Proxy Authentication Required) that contains multiple
- challenges, a UAC MAY include an Authorization value for each WWW-
- Authenticate value and a Proxy-Authorization value for each Proxy-
- Authenticate value for which the UAC wishes to supply a credential.
- As noted above, multiple credentials in a request SHOULD be
- differentiated by the "realm" parameter.
-
- It is possible for multiple challenges associated with the same realm
- to appear in the same 401 (Unauthorized) or 407 (Proxy Authentication
- Required). This can occur, for example, when multiple proxies within
- the same administrative domain, which use a common realm, are reached
- by a forking request. When it retries a request, a UAC MAY therefore
- supply multiple credentials in Authorization or Proxy-Authorization
- header fields with the same "realm" parameter value. The same
- credentials SHOULD be used for the same realm.
-
-22.4 The Digest Authentication Scheme
-
- This section describes the modifications and clarifications required
- to apply the HTTP Digest authentication scheme to SIP. The SIP
- scheme usage is almost completely identical to that for HTTP [17].
-
- Since RFC 2543 is based on HTTP Digest as defined in RFC 2069 [39],
- SIP servers supporting RFC 2617 MUST ensure they are backwards
- compatible with RFC 2069. Procedures for this backwards
- compatibility are specified in RFC 2617. Note, however, that SIP
- servers MUST NOT accept or request Basic authentication.
-
- The rules for Digest authentication follow those defined in [17],
- with "HTTP/1.1" replaced by "SIP/2.0" in addition to the following
- differences:
-
- 1. The URI included in the challenge has the following BNF:
-
- URI = SIP-URI / SIPS-URI
-
- 2. The BNF in RFC 2617 has an error in that the 'uri' parameter
- of the Authorization header field for HTTP Digest
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 199]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- authentication is not enclosed in quotation marks. (The
- example in Section 3.5 of RFC 2617 is correct.) For SIP, the
- 'uri' MUST be enclosed in quotation marks.
-
- 3. The BNF for digest-uri-value is:
-
- digest-uri-value = Request-URI ; as defined in Section 25
-
- 4. The example procedure for choosing a nonce based on Etag does
- not work for SIP.
-
- 5. The text in RFC 2617 [17] regarding cache operation does not
- apply to SIP.
-
- 6. RFC 2617 [17] requires that a server check that the URI in the
- request line and the URI included in the Authorization header
- field point to the same resource. In a SIP context, these two
- URIs may refer to different users, due to forwarding at some
- proxy. Therefore, in SIP, a server MAY check that the
- Request-URI in the Authorization header field value
- corresponds to a user for whom the server is willing to accept
- forwarded or direct requests, but it is not necessarily a
- failure if the two fields are not equivalent.
-
- 7. As a clarification to the calculation of the A2 value for
- message integrity assurance in the Digest authentication
- scheme, implementers should assume, when the entity-body is
- empty (that is, when SIP messages have no body) that the hash
- of the entity-body resolves to the MD5 hash of an empty
- string, or:
-
- H(entity-body) = MD5("") =
- "d41d8cd98f00b204e9800998ecf8427e"
-
- 8. RFC 2617 notes that a cnonce value MUST NOT be sent in an
- Authorization (and by extension Proxy-Authorization) header
- field if no qop directive has been sent. Therefore, any
- algorithms that have a dependency on the cnonce (including
- "MD5-Sess") require that the qop directive be sent. Use of
- the "qop" parameter is optional in RFC 2617 for the purposes
- of backwards compatibility with RFC 2069; since RFC 2543 was
- based on RFC 2069, the "qop" parameter must unfortunately
- remain optional for clients and servers to receive. However,
- servers MUST always send a "qop" parameter in WWW-Authenticate
- and Proxy-Authenticate header field values. If a client
- receives a "qop" parameter in a challenge header field, it
- MUST send the "qop" parameter in any resulting authorization
- header field.
-
-
-
-Rosenberg, et. al. Standards Track [Page 200]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- RFC 2543 did not allow usage of the Authentication-Info header field
- (it effectively used RFC 2069). However, we now allow usage of this
- header field, since it provides integrity checks over the bodies and
- provides mutual authentication. RFC 2617 [17] defines mechanisms for
- backwards compatibility using the qop attribute in the request.
- These mechanisms MUST be used by a server to determine if the client
- supports the new mechanisms in RFC 2617 that were not specified in
- RFC 2069.
-
-23 S/MIME
-
- SIP messages carry MIME bodies and the MIME standard includes
- mechanisms for securing MIME contents to ensure both integrity and
- confidentiality (including the 'multipart/signed' and
- 'application/pkcs7-mime' MIME types, see RFC 1847 [22], RFC 2630 [23]
- and RFC 2633 [24]). Implementers should note, however, that there
- may be rare network intermediaries (not typical proxy servers) that
- rely on viewing or modifying the bodies of SIP messages (especially
- SDP), and that secure MIME may prevent these sorts of intermediaries
- from functioning.
-
- This applies particularly to certain types of firewalls.
-
- The PGP mechanism for encrypting the header fields and bodies of
- SIP messages described in RFC 2543 has been deprecated.
-
-23.1 S/MIME Certificates
-
- The certificates that are used to identify an end-user for the
- purposes of S/MIME differ from those used by servers in one important
- respect - rather than asserting that the identity of the holder
- corresponds to a particular hostname, these certificates assert that
- the holder is identified by an end-user address. This address is
- composed of the concatenation of the "userinfo" "@" and "domainname"
- portions of a SIP or SIPS URI (in other words, an email address of
- the form "bob@biloxi.com"), most commonly corresponding to a user's
- address-of-record.
-
- These certificates are also associated with keys that are used to
- sign or encrypt bodies of SIP messages. Bodies are signed with the
- private key of the sender (who may include their public key with the
- message as appropriate), but bodies are encrypted with the public key
- of the intended recipient. Obviously, senders must have
- foreknowledge of the public key of recipients in order to encrypt
- message bodies. Public keys can be stored within a UA on a virtual
- keyring.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 201]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Each user agent that supports S/MIME MUST contain a keyring
- specifically for end-users' certificates. This keyring should map
- between addresses of record and corresponding certificates. Over
- time, users SHOULD use the same certificate when they populate the
- originating URI of signaling (the From header field) with the same
- address-of-record.
-
- Any mechanisms depending on the existence of end-user certificates
- are seriously limited in that there is virtually no consolidated
- authority today that provides certificates for end-user applications.
- However, users SHOULD acquire certificates from known public
- certificate authorities. As an alternative, users MAY create self-
- signed certificates. The implications of self-signed certificates
- are explored further in Section 26.4.2. Implementations may also use
- pre-configured certificates in deployments in which a previous trust
- relationship exists between all SIP entities.
-
- Above and beyond the problem of acquiring an end-user certificate,
- there are few well-known centralized directories that distribute
- end-user certificates. However, the holder of a certificate SHOULD
- publish their certificate in any public directories as appropriate.
- Similarly, UACs SHOULD support a mechanism for importing (manually or
- automatically) certificates discovered in public directories
- corresponding to the target URIs of SIP requests.
-
-23.2 S/MIME Key Exchange
-
- SIP itself can also be used as a means to distribute public keys in
- the following manner.
-
- Whenever the CMS SignedData message is used in S/MIME for SIP, it
- MUST contain the certificate bearing the public key necessary to
- verify the signature.
-
- When a UAC sends a request containing an S/MIME body that initiates a
- dialog, or sends a non-INVITE request outside the context of a
- dialog, the UAC SHOULD structure the body as an S/MIME
- 'multipart/signed' CMS SignedData body. If the desired CMS service
- is EnvelopedData (and the public key of the target user is known),
- the UAC SHOULD send the EnvelopedData message encapsulated within a
- SignedData message.
-
- When a UAS receives a request containing an S/MIME CMS body that
- includes a certificate, the UAS SHOULD first validate the
- certificate, if possible, with any available root certificates for
- certificate authorities. The UAS SHOULD also determine the subject
- of the certificate (for S/MIME, the SubjectAltName will contain the
- appropriate identity) and compare this value to the From header field
-
-
-
-Rosenberg, et. al. Standards Track [Page 202]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- of the request. If the certificate cannot be verified, because it is
- self-signed, or signed by no known authority, or if it is verifiable
- but its subject does not correspond to the From header field of
- request, the UAS MUST notify its user of the status of the
- certificate (including the subject of the certificate, its signer,
- and any key fingerprint information) and request explicit permission
- before proceeding. If the certificate was successfully verified and
- the subject of the certificate corresponds to the From header field
- of the SIP request, or if the user (after notification) explicitly
- authorizes the use of the certificate, the UAS SHOULD add this
- certificate to a local keyring, indexed by the address-of-record of
- the holder of the certificate.
-
- When a UAS sends a response containing an S/MIME body that answers
- the first request in a dialog, or a response to a non-INVITE request
- outside the context of a dialog, the UAS SHOULD structure the body as
- an S/MIME 'multipart/signed' CMS SignedData body. If the desired CMS
- service is EnvelopedData, the UAS SHOULD send the EnvelopedData
- message encapsulated within a SignedData message.
-
- When a UAC receives a response containing an S/MIME CMS body that
- includes a certificate, the UAC SHOULD first validate the
- certificate, if possible, with any appropriate root certificate. The
- UAC SHOULD also determine the subject of the certificate and compare
- this value to the To field of the response; although the two may very
- well be different, and this is not necessarily indicative of a
- security breach. If the certificate cannot be verified because it is
- self-signed, or signed by no known authority, the UAC MUST notify its
- user of the status of the certificate (including the subject of the
- certificate, its signator, and any key fingerprint information) and
- request explicit permission before proceeding. If the certificate
- was successfully verified, and the subject of the certificate
- corresponds to the To header field in the response, or if the user
- (after notification) explicitly authorizes the use of the
- certificate, the UAC SHOULD add this certificate to a local keyring,
- indexed by the address-of-record of the holder of the certificate.
- If the UAC had not transmitted its own certificate to the UAS in any
- previous transaction, it SHOULD use a CMS SignedData body for its
- next request or response.
-
- On future occasions, when the UA receives requests or responses that
- contain a From header field corresponding to a value in its keyring,
- the UA SHOULD compare the certificate offered in these messages with
- the existing certificate in its keyring. If there is a discrepancy,
- the UA MUST notify its user of a change of the certificate
- (preferably in terms that indicate that this is a potential security
- breach) and acquire the user's permission before continuing to
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 203]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- process the signaling. If the user authorizes this certificate, it
- SHOULD be added to the keyring alongside any previous value(s) for
- this address-of-record.
-
- Note well however, that this key exchange mechanism does not
- guarantee the secure exchange of keys when self-signed certificates,
- or certificates signed by an obscure authority, are used - it is
- vulnerable to well-known attacks. In the opinion of the authors,
- however, the security it provides is proverbially better than
- nothing; it is in fact comparable to the widely used SSH application.
- These limitations are explored in greater detail in Section 26.4.2.
-
- If a UA receives an S/MIME body that has been encrypted with a public
- key unknown to the recipient, it MUST reject the request with a 493
- (Undecipherable) response. This response SHOULD contain a valid
- certificate for the respondent (corresponding, if possible, to any
- address of record given in the To header field of the rejected
- request) within a MIME body with a 'certs-only' "smime-type"
- parameter.
-
- A 493 (Undecipherable) sent without any certificate indicates that
- the respondent cannot or will not utilize S/MIME encrypted messages,
- though they may still support S/MIME signatures.
-
- Note that a user agent that receives a request containing an S/MIME
- body that is not optional (with a Content-Disposition header
- "handling" parameter of "required") MUST reject the request with a
- 415 Unsupported Media Type response if the MIME type is not
- understood. A user agent that receives such a response when S/MIME
- is sent SHOULD notify its user that the remote device does not
- support S/MIME, and it MAY subsequently resend the request without
- S/MIME, if appropriate; however, this 415 response may constitute a
- downgrade attack.
-
- If a user agent sends an S/MIME body in a request, but receives a
- response that contains a MIME body that is not secured, the UAC
- SHOULD notify its user that the session could not be secured.
- However, if a user agent that supports S/MIME receives a request with
- an unsecured body, it SHOULD NOT respond with a secured body, but if
- it expects S/MIME from the sender (for example, because the sender's
- From header field value corresponds to an identity on its keychain),
- the UAS SHOULD notify its user that the session could not be secured.
-
- A number of conditions that arise in the previous text call for the
- notification of the user when an anomalous certificate-management
- event occurs. Users might well ask what they should do under these
- circumstances. First and foremost, an unexpected change in a
- certificate, or an absence of security when security is expected, are
-
-
-
-Rosenberg, et. al. Standards Track [Page 204]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- causes for caution but not necessarily indications that an attack is
- in progress. Users might abort any connection attempt or refuse a
- connection request they have received; in telephony parlance, they
- could hang up and call back. Users may wish to find an alternate
- means to contact the other party and confirm that their key has
- legitimately changed. Note that users are sometimes compelled to
- change their certificates, for example when they suspect that the
- secrecy of their private key has been compromised. When their
- private key is no longer private, users must legitimately generate a
- new key and re-establish trust with any users that held their old
- key.
-
- Finally, if during the course of a dialog a UA receives a certificate
- in a CMS SignedData message that does not correspond with the
- certificates previously exchanged during a dialog, the UA MUST notify
- its user of the change, preferably in terms that indicate that this
- is a potential security breach.
-
-23.3 Securing MIME bodies
-
- There are two types of secure MIME bodies that are of interest to
- SIP: use of these bodies should follow the S/MIME specification [24]
- with a few variations.
-
- o "multipart/signed" MUST be used only with CMS detached
- signatures.
-
- This allows backwards compatibility with non-S/MIME-
- compliant recipients.
-
- o S/MIME bodies SHOULD have a Content-Disposition header field,
- and the value of the "handling" parameter SHOULD be "required."
-
- o If a UAC has no certificate on its keyring associated with the
- address-of-record to which it wants to send a request, it
- cannot send an encrypted "application/pkcs7-mime" MIME message.
- UACs MAY send an initial request such as an OPTIONS message
- with a CMS detached signature in order to solicit the
- certificate of the remote side (the signature SHOULD be over a
- "message/sip" body of the type described in Section 23.4).
-
- Note that future standardization work on S/MIME may define
- non-certificate based keys.
-
- o Senders of S/MIME bodies SHOULD use the "SMIMECapabilities"
- (see Section 2.5.2 of [24]) attribute to express their
- capabilities and preferences for further communications. Note
- especially that senders MAY use the "preferSignedData"
-
-
-
-Rosenberg, et. al. Standards Track [Page 205]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- capability to encourage receivers to respond with CMS
- SignedData messages (for example, when sending an OPTIONS
- request as described above).
-
- o S/MIME implementations MUST at a minimum support SHA1 as a
- digital signature algorithm, and 3DES as an encryption
- algorithm. All other signature and encryption algorithms MAY
- be supported. Implementations can negotiate support for these
- algorithms with the "SMIMECapabilities" attribute.
-
- o Each S/MIME body in a SIP message SHOULD be signed with only
- one certificate. If a UA receives a message with multiple
- signatures, the outermost signature should be treated as the
- single certificate for this body. Parallel signatures SHOULD
- NOT be used.
-
- The following is an example of an encrypted S/MIME SDP body
- within a SIP message:
-
- INVITE sip:bob@biloxi.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- To: Bob <sip:bob@biloxi.com>
- From: Alice <sip:alice@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710
- CSeq: 314159 INVITE
- Max-Forwards: 70
- Contact: <sip:alice@pc33.atlanta.com>
- Content-Type: application/pkcs7-mime; smime-type=enveloped-data;
- name=smime.p7m
- Content-Disposition: attachment; filename=smime.p7m
- handling=required
-
- *******************************************************
- * Content-Type: application/sdp *
- * *
- * v=0 *
- * o=alice 53655765 2353687637 IN IP4 pc33.atlanta.com *
- * s=- *
- * t=0 0 *
- * c=IN IP4 pc33.atlanta.com *
- * m=audio 3456 RTP/AVP 0 1 3 99 *
- * a=rtpmap:0 PCMU/8000 *
- *******************************************************
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 206]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-23.4 SIP Header Privacy and Integrity using S/MIME: Tunneling SIP
-
- As a means of providing some degree of end-to-end authentication,
- integrity or confidentiality for SIP header fields, S/MIME can
- encapsulate entire SIP messages within MIME bodies of type
- "message/sip" and then apply MIME security to these bodies in the
- same manner as typical SIP bodies. These encapsulated SIP requests
- and responses do not constitute a separate dialog or transaction,
- they are a copy of the "outer" message that is used to verify
- integrity or to supply additional information.
-
- If a UAS receives a request that contains a tunneled "message/sip"
- S/MIME body, it SHOULD include a tunneled "message/sip" body in the
- response with the same smime-type.
-
- Any traditional MIME bodies (such as SDP) SHOULD be attached to the
- "inner" message so that they can also benefit from S/MIME security.
- Note that "message/sip" bodies can be sent as a part of a MIME
- "multipart/mixed" body if any unsecured MIME types should also be
- transmitted in a request.
-
-23.4.1 Integrity and Confidentiality Properties of SIP Headers
-
- When the S/MIME integrity or confidentiality mechanisms are used,
- there may be discrepancies between the values in the "inner" message
- and values in the "outer" message. The rules for handling any such
- differences for all of the header fields described in this document
- are given in this section.
-
- Note that for the purposes of loose timestamping, all SIP messages
- that tunnel "message/sip" SHOULD contain a Date header in both the
- "inner" and "outer" headers.
-
-23.4.1.1 Integrity
-
- Whenever integrity checks are performed, the integrity of a header
- field should be determined by matching the value of the header field
- in the signed body with that in the "outer" messages using the
- comparison rules of SIP as described in 20.
-
- Header fields that can be legitimately modified by proxy servers are:
- Request-URI, Via, Record-Route, Route, Max-Forwards, and Proxy-
- Authorization. If these header fields are not intact end-to-end,
- implementations SHOULD NOT consider this a breach of security.
- Changes to any other header fields defined in this document
- constitute an integrity violation; users MUST be notified of a
- discrepancy.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 207]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-23.4.1.2 Confidentiality
-
- When messages are encrypted, header fields may be included in the
- encrypted body that are not present in the "outer" message.
-
- Some header fields must always have a plaintext version because they
- are required header fields in requests and responses - these include:
-
- To, From, Call-ID, CSeq, Contact. While it is probably not useful to
- provide an encrypted alternative for the Call-ID, CSeq, or Contact,
- providing an alternative to the information in the "outer" To or From
- is permitted. Note that the values in an encrypted body are not used
- for the purposes of identifying transactions or dialogs - they are
- merely informational. If the From header field in an encrypted body
- differs from the value in the "outer" message, the value within the
- encrypted body SHOULD be displayed to the user, but MUST NOT be used
- in the "outer" header fields of any future messages.
-
- Primarily, a user agent will want to encrypt header fields that have
- an end-to-end semantic, including: Subject, Reply-To, Organization,
- Accept, Accept-Encoding, Accept-Language, Alert-Info, Error-Info,
- Authentication-Info, Expires, In-Reply-To, Require, Supported,
- Unsupported, Retry-After, User-Agent, Server, and Warning. If any of
- these header fields are present in an encrypted body, they should be
- used instead of any "outer" header fields, whether this entails
- displaying the header field values to users or setting internal
- states in the UA. They SHOULD NOT however be used in the "outer"
- headers of any future messages.
-
- If present, the Date header field MUST always be the same in the
- "inner" and "outer" headers.
-
- Since MIME bodies are attached to the "inner" message,
- implementations will usually encrypt MIME-specific header fields,
- including: MIME-Version, Content-Type, Content-Length, Content-
- Language, Content-Encoding and Content-Disposition. The "outer"
- message will have the proper MIME header fields for S/MIME bodies.
- These header fields (and any MIME bodies they preface) should be
- treated as normal MIME header fields and bodies received in a SIP
- message.
-
- It is not particularly useful to encrypt the following header fields:
- Min-Expires, Timestamp, Authorization, Priority, and WWW-
- Authenticate. This category also includes those header fields that
- can be changed by proxy servers (described in the preceding section).
- UAs SHOULD never include these in an "inner" message if they are not
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 208]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- included in the "outer" message. UAs that receive any of these
- header fields in an encrypted body SHOULD ignore the encrypted
- values.
-
- Note that extensions to SIP may define additional header fields; the
- authors of these extensions should describe the integrity and
- confidentiality properties of such header fields. If a SIP UA
- encounters an unknown header field with an integrity violation, it
- MUST ignore the header field.
-
-23.4.2 Tunneling Integrity and Authentication
-
- Tunneling SIP messages within S/MIME bodies can provide integrity for
- SIP header fields if the header fields that the sender wishes to
- secure are replicated in a "message/sip" MIME body signed with a CMS
- detached signature.
-
- Provided that the "message/sip" body contains at least the
- fundamental dialog identifiers (To, From, Call-ID, CSeq), then a
- signed MIME body can provide limited authentication. At the very
- least, if the certificate used to sign the body is unknown to the
- recipient and cannot be verified, the signature can be used to
- ascertain that a later request in a dialog was transmitted by the
- same certificate-holder that initiated the dialog. If the recipient
- of the signed MIME body has some stronger incentive to trust the
- certificate (they were able to validate it, they acquired it from a
- trusted repository, or they have used it frequently) then the
- signature can be taken as a stronger assertion of the identity of the
- subject of the certificate.
-
- In order to eliminate possible confusions about the addition or
- subtraction of entire header fields, senders SHOULD replicate all
- header fields from the request within the signed body. Any message
- bodies that require integrity protection MUST be attached to the
- "inner" message.
-
- If a Date header is present in a message with a signed body, the
- recipient SHOULD compare the header field value with its own internal
- clock, if applicable. If a significant time discrepancy is detected
- (on the order of an hour or more), the user agent SHOULD alert the
- user to the anomaly, and note that it is a potential security breach.
-
- If an integrity violation in a message is detected by its recipient,
- the message MAY be rejected with a 403 (Forbidden) response if it is
- a request, or any existing dialog MAY be terminated. UAs SHOULD
- notify users of this circumstance and request explicit guidance on
- how to proceed.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 209]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The following is an example of the use of a tunneled "message/sip"
- body:
-
- INVITE sip:bob@biloxi.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- To: Bob <sip:bob@biloxi.com>
- From: Alice <sip:alice@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710
- CSeq: 314159 INVITE
- Max-Forwards: 70
- Date: Thu, 21 Feb 2002 13:02:03 GMT
- Contact: <sip:alice@pc33.atlanta.com>
- Content-Type: multipart/signed;
- protocol="application/pkcs7-signature";
- micalg=sha1; boundary=boundary42
- Content-Length: 568
-
- --boundary42
- Content-Type: message/sip
-
- INVITE sip:bob@biloxi.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- To: Bob <bob@biloxi.com>
- From: Alice <alice@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710
- CSeq: 314159 INVITE
- Max-Forwards: 70
- Date: Thu, 21 Feb 2002 13:02:03 GMT
- Contact: <sip:alice@pc33.atlanta.com>
- Content-Type: application/sdp
- Content-Length: 147
-
- v=0
- o=UserA 2890844526 2890844526 IN IP4 here.com
- s=Session SDP
- c=IN IP4 pc33.atlanta.com
- t=0 0
- m=audio 49172 RTP/AVP 0
- a=rtpmap:0 PCMU/8000
-
- --boundary42
- Content-Type: application/pkcs7-signature; name=smime.p7s
- Content-Transfer-Encoding: base64
- Content-Disposition: attachment; filename=smime.p7s;
- handling=required
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 210]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6
- 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj
- n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
- 7GhIGfHfYT64VQbnj756
-
- --boundary42-
-
-23.4.3 Tunneling Encryption
-
- It may also be desirable to use this mechanism to encrypt a
- "message/sip" MIME body within a CMS EnvelopedData message S/MIME
- body, but in practice, most header fields are of at least some use to
- the network; the general use of encryption with S/MIME is to secure
- message bodies like SDP rather than message headers. Some
- informational header fields, such as the Subject or Organization
- could perhaps warrant end-to-end security. Headers defined by future
- SIP applications might also require obfuscation.
-
- Another possible application of encrypting header fields is selective
- anonymity. A request could be constructed with a From header field
- that contains no personal information (for example,
- sip:anonymous@anonymizer.invalid). However, a second From header
- field containing the genuine address-of-record of the originator
- could be encrypted within a "message/sip" MIME body where it will
- only be visible to the endpoints of a dialog.
-
- Note that if this mechanism is used for anonymity, the From header
- field will no longer be usable by the recipient of a message as an
- index to their certificate keychain for retrieving the proper
- S/MIME key to associated with the sender. The message must first
- be decrypted, and the "inner" From header field MUST be used as an
- index.
-
- In order to provide end-to-end integrity, encrypted "message/sip"
- MIME bodies SHOULD be signed by the sender. This creates a
- "multipart/signed" MIME body that contains an encrypted body and a
- signature, both of type "application/pkcs7-mime".
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 211]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- In the following example, of an encrypted and signed message, the
- text boxed in asterisks ("*") is encrypted:
-
- INVITE sip:bob@biloxi.com SIP/2.0
- Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- To: Bob <sip:bob@biloxi.com>
- From: Anonymous <sip:anonymous@atlanta.com>;tag=1928301774
- Call-ID: a84b4c76e66710
- CSeq: 314159 INVITE
- Max-Forwards: 70
- Date: Thu, 21 Feb 2002 13:02:03 GMT
- Contact: <sip:pc33.atlanta.com>
- Content-Type: multipart/signed;
- protocol="application/pkcs7-signature";
- micalg=sha1; boundary=boundary42
- Content-Length: 568
-
- --boundary42
- Content-Type: application/pkcs7-mime; smime-type=enveloped-data;
- name=smime.p7m
- Content-Transfer-Encoding: base64
- Content-Disposition: attachment; filename=smime.p7m
- handling=required
- Content-Length: 231
-
- ***********************************************************
- * Content-Type: message/sip *
- * *
- * INVITE sip:bob@biloxi.com SIP/2.0 *
- * Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8 *
- * To: Bob <bob@biloxi.com> *
- * From: Alice <alice@atlanta.com>;tag=1928301774 *
- * Call-ID: a84b4c76e66710 *
- * CSeq: 314159 INVITE *
- * Max-Forwards: 70 *
- * Date: Thu, 21 Feb 2002 13:02:03 GMT *
- * Contact: <sip:alice@pc33.atlanta.com> *
- * *
- * Content-Type: application/sdp *
- * *
- * v=0 *
- * o=alice 53655765 2353687637 IN IP4 pc33.atlanta.com *
- * s=Session SDP *
- * t=0 0 *
- * c=IN IP4 pc33.atlanta.com *
- * m=audio 3456 RTP/AVP 0 1 3 99 *
- * a=rtpmap:0 PCMU/8000 *
- ***********************************************************
-
-
-
-Rosenberg, et. al. Standards Track [Page 212]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- --boundary42
- Content-Type: application/pkcs7-signature; name=smime.p7s
- Content-Transfer-Encoding: base64
- Content-Disposition: attachment; filename=smime.p7s;
- handling=required
-
- ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6
- 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj
- n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4
- 7GhIGfHfYT64VQbnj756
-
- --boundary42-
-
-24 Examples
-
- In the following examples, we often omit the message body and the
- corresponding Content-Length and Content-Type header fields for
- brevity.
-
-24.1 Registration
-
- Bob registers on start-up. The message flow is shown in Figure 9.
- Note that the authentication usually required for registration is not
- shown for simplicity.
-
- biloxi.com Bob's
- registrar softphone
- | |
- | REGISTER F1 |
- |<---------------|
- | 200 OK F2 |
- |--------------->|
-
- Figure 9: SIP Registration Example
-
- F1 REGISTER Bob -> Registrar
-
- REGISTER sip:registrar.biloxi.com SIP/2.0
- Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
- Max-Forwards: 70
- To: Bob <sip:bob@biloxi.com>
- From: Bob <sip:bob@biloxi.com>;tag=456248
- Call-ID: 843817637684230@998sdasdh09
- CSeq: 1826 REGISTER
- Contact: <sip:bob@192.0.2.4>
- Expires: 7200
- Content-Length: 0
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 213]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The registration expires after two hours. The registrar responds
- with a 200 OK:
-
- F2 200 OK Registrar -> Bob
-
- SIP/2.0 200 OK
- Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
- ;received=192.0.2.4
- To: Bob <sip:bob@biloxi.com>;tag=2493k59kd
- From: Bob <sip:bob@biloxi.com>;tag=456248
- Call-ID: 843817637684230@998sdasdh09
- CSeq: 1826 REGISTER
- Contact: <sip:bob@192.0.2.4>
- Expires: 7200
- Content-Length: 0
-
-24.2 Session Setup
-
- This example contains the full details of the example session setup
- in Section 4. The message flow is shown in Figure 1. Note that
- these flows show the minimum required set of header fields - some
- other header fields such as Allow and Supported would normally be
- present.
-
-F1 INVITE Alice -> atlanta.com proxy
-
-INVITE sip:bob@biloxi.com SIP/2.0
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
-Max-Forwards: 70
-To: Bob <sip:bob@biloxi.com>
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Contact: <sip:alice@pc33.atlanta.com>
-Content-Type: application/sdp
-Content-Length: 142
-
-(Alice's SDP not shown)
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 214]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-F2 100 Trying atlanta.com proxy -> Alice
-
-SIP/2.0 100 Trying
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Content-Length: 0
-
-F3 INVITE atlanta.com proxy -> biloxi.com proxy
-
-INVITE sip:bob@biloxi.com SIP/2.0
-Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-Max-Forwards: 69
-To: Bob <sip:bob@biloxi.com>
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Contact: <sip:alice@pc33.atlanta.com>
-Content-Type: application/sdp
-Content-Length: 142
-
-(Alice's SDP not shown)
-
-F4 100 Trying biloxi.com proxy -> atlanta.com proxy
-
-SIP/2.0 100 Trying
-Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1
- ;received=192.0.2.2
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Content-Length: 0
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 215]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-F5 INVITE biloxi.com proxy -> Bob
-
-INVITE sip:bob@192.0.2.4 SIP/2.0
-Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1
-Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1
- ;received=192.0.2.2
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-Max-Forwards: 68
-To: Bob <sip:bob@biloxi.com>
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Contact: <sip:alice@pc33.atlanta.com>
-Content-Type: application/sdp
-Content-Length: 142
-
-(Alice's SDP not shown)
-
-F6 180 Ringing Bob -> biloxi.com proxy
-
-SIP/2.0 180 Ringing
-Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1
- ;received=192.0.2.3
-Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1
- ;received=192.0.2.2
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-Contact: <sip:bob@192.0.2.4>
-CSeq: 314159 INVITE
-Content-Length: 0
-
-F7 180 Ringing biloxi.com proxy -> atlanta.com proxy
-
-SIP/2.0 180 Ringing
-Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1
- ;received=192.0.2.2
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-Contact: <sip:bob@192.0.2.4>
-CSeq: 314159 INVITE
-Content-Length: 0
-
-
-
-Rosenberg, et. al. Standards Track [Page 216]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-F8 180 Ringing atlanta.com proxy -> Alice
-
-SIP/2.0 180 Ringing
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-Contact: <sip:bob@192.0.2.4>
-CSeq: 314159 INVITE
-Content-Length: 0
-
-F9 200 OK Bob -> biloxi.com proxy
-
-SIP/2.0 200 OK
-Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bK4b43c2ff8.1
- ;received=192.0.2.3
-Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1
- ;received=192.0.2.2
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Contact: <sip:bob@192.0.2.4>
-Content-Type: application/sdp
-Content-Length: 131
-
-(Bob's SDP not shown)
-
-F10 200 OK biloxi.com proxy -> atlanta.com proxy
-
-SIP/2.0 200 OK
-Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1
- ;received=192.0.2.2
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Contact: <sip:bob@192.0.2.4>
-Content-Type: application/sdp
-Content-Length: 131
-
-(Bob's SDP not shown)
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 217]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-F11 200 OK atlanta.com proxy -> Alice
-
-SIP/2.0 200 OK
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
- ;received=192.0.2.1
-To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 INVITE
-Contact: <sip:bob@192.0.2.4>
-Content-Type: application/sdp
-Content-Length: 131
-
-(Bob's SDP not shown)
-
-F12 ACK Alice -> Bob
-
-ACK sip:bob@192.0.2.4 SIP/2.0
-Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds9
-Max-Forwards: 70
-To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-From: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 314159 ACK
-Content-Length: 0
-
- The media session between Alice and Bob is now established.
-
- Bob hangs up first. Note that Bob's SIP phone maintains its own CSeq
- numbering space, which, in this example, begins with 231. Since Bob
- is making the request, the To and From URIs and tags have been
- swapped.
-
-F13 BYE Bob -> Alice
-
-BYE sip:alice@pc33.atlanta.com SIP/2.0
-Via: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10
-Max-Forwards: 70
-From: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-To: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 231 BYE
-Content-Length: 0
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 218]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-F14 200 OK Alice -> Bob
-
-SIP/2.0 200 OK
-Via: SIP/2.0/UDP 192.0.2.4;branch=z9hG4bKnashds10
-From: Bob <sip:bob@biloxi.com>;tag=a6c85cf
-To: Alice <sip:alice@atlanta.com>;tag=1928301774
-Call-ID: a84b4c76e66710
-CSeq: 231 BYE
-Content-Length: 0
-
- The SIP Call Flows document [40] contains further examples of SIP
- messages.
-
-25 Augmented BNF for the SIP Protocol
-
- All of the mechanisms specified in this document are described in
- both prose and an augmented Backus-Naur Form (BNF) defined in RFC
- 2234 [10]. Section 6.1 of RFC 2234 defines a set of core rules that
- are used by this specification, and not repeated here. Implementers
- need to be familiar with the notation and content of RFC 2234 in
- order to understand this specification. Certain basic rules are in
- uppercase, such as SP, LWS, HTAB, CRLF, DIGIT, ALPHA, etc. Angle
- brackets are used within definitions to clarify the use of rule
- names.
-
- The use of square brackets is redundant syntactically. It is used as
- a semantic hint that the specific parameter is optional to use.
-
-25.1 Basic Rules
-
- The following rules are used throughout this specification to
- describe basic parsing constructs. The US-ASCII coded character set
- is defined by ANSI X3.4-1986.
-
- alphanum = ALPHA / DIGIT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 219]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Several rules are incorporated from RFC 2396 [5] but are updated to
- make them compliant with RFC 2234 [10]. These include:
-
- reserved = ";" / "/" / "?" / ":" / "@" / "&" / "=" / "+"
- / "$" / ","
- unreserved = alphanum / mark
- mark = "-" / "_" / "." / "!" / "~" / "*" / "'"
- / "(" / ")"
- escaped = "%" HEXDIG HEXDIG
-
- SIP header field values can be folded onto multiple lines if the
- continuation line begins with a space or horizontal tab. All linear
- white space, including folding, has the same semantics as SP. A
- recipient MAY replace any linear white space with a single SP before
- interpreting the field value or forwarding the message downstream.
- This is intended to behave exactly as HTTP/1.1 as described in RFC
- 2616 [8]. The SWS construct is used when linear white space is
- optional, generally between tokens and separators.
-
- LWS = [*WSP CRLF] 1*WSP ; linear whitespace
- SWS = [LWS] ; sep whitespace
-
- To separate the header name from the rest of value, a colon is used,
- which, by the above rule, allows whitespace before, but no line
- break, and whitespace after, including a linebreak. The HCOLON
- defines this construct.
-
- HCOLON = *( SP / HTAB ) ":" SWS
-
- The TEXT-UTF8 rule is only used for descriptive field contents and
- values that are not intended to be interpreted by the message parser.
- Words of *TEXT-UTF8 contain characters from the UTF-8 charset (RFC
- 2279 [7]). The TEXT-UTF8-TRIM rule is used for descriptive field
- contents that are n t quoted strings, where leading and trailing LWS
- is not meaningful. In this regard, SIP differs from HTTP, which uses
- the ISO 8859-1 character set.
-
- TEXT-UTF8-TRIM = 1*TEXT-UTF8char *(*LWS TEXT-UTF8char)
- TEXT-UTF8char = %x21-7E / UTF8-NONASCII
- UTF8-NONASCII = %xC0-DF 1UTF8-CONT
- / %xE0-EF 2UTF8-CONT
- / %xF0-F7 3UTF8-CONT
- / %xF8-Fb 4UTF8-CONT
- / %xFC-FD 5UTF8-CONT
- UTF8-CONT = %x80-BF
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 220]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- A CRLF is allowed in the definition of TEXT-UTF8-TRIM only as part of
- a header field continuation. It is expected that the folding LWS
- will be replaced with a single SP before interpretation of the TEXT-
- UTF8-TRIM value.
-
- Hexadecimal numeric characters are used in several protocol elements.
- Some elements (authentication) force hex alphas to be lower case.
-
- LHEX = DIGIT / %x61-66 ;lowercase a-f
-
- Many SIP header field values consist of words separated by LWS or
- special characters. Unless otherwise stated, tokens are case-
- insensitive. These special characters MUST be in a quoted string to
- be used within a parameter value. The word construct is used in
- Call-ID to allow most separators to be used.
-
- token = 1*(alphanum / "-" / "." / "!" / "%" / "*"
- / "_" / "+" / "`" / "'" / "~" )
- separators = "(" / ")" / "<" / ">" / "@" /
- "," / ";" / ":" / "\" / DQUOTE /
- "/" / "[" / "]" / "?" / "=" /
- "{" / "}" / SP / HTAB
- word = 1*(alphanum / "-" / "." / "!" / "%" / "*" /
- "_" / "+" / "`" / "'" / "~" /
- "(" / ")" / "<" / ">" /
- ":" / "\" / DQUOTE /
- "/" / "[" / "]" / "?" /
- "{" / "}" )
-
- When tokens are used or separators are used between elements,
- whitespace is often allowed before or after these characters:
-
- STAR = SWS "*" SWS ; asterisk
- SLASH = SWS "/" SWS ; slash
- EQUAL = SWS "=" SWS ; equal
- LPAREN = SWS "(" SWS ; left parenthesis
- RPAREN = SWS ")" SWS ; right parenthesis
- RAQUOT = ">" SWS ; right angle quote
- LAQUOT = SWS "<"; left angle quote
- COMMA = SWS "," SWS ; comma
- SEMI = SWS ";" SWS ; semicolon
- COLON = SWS ":" SWS ; colon
- LDQUOT = SWS DQUOTE; open double quotation mark
- RDQUOT = DQUOTE SWS ; close double quotation mark
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 221]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Comments can be included in some SIP header fields by surrounding the
- comment text with parentheses. Comments are only allowed in fields
- containing "comment" as part of their field value definition. In all
- other fields, parentheses are considered part of the field value.
-
- comment = LPAREN *(ctext / quoted-pair / comment) RPAREN
- ctext = %x21-27 / %x2A-5B / %x5D-7E / UTF8-NONASCII
- / LWS
-
- ctext includes all chars except left and right parens and backslash.
- A string of text is parsed as a single word if it is quoted using
- double-quote marks. In quoted strings, quotation marks (") and
- backslashes (\) need to be escaped.
-
- quoted-string = SWS DQUOTE *(qdtext / quoted-pair ) DQUOTE
- qdtext = LWS / %x21 / %x23-5B / %x5D-7E
- / UTF8-NONASCII
-
- The backslash character ("\") MAY be used as a single-character
- quoting mechanism only within quoted-string and comment constructs.
- Unlike HTTP/1.1, the characters CR and LF cannot be escaped by this
- mechanism to avoid conflict with line folding and header separation.
-
-quoted-pair = "\" (%x00-09 / %x0B-0C
- / %x0E-7F)
-
-SIP-URI = "sip:" [ userinfo ] hostport
- uri-parameters [ headers ]
-SIPS-URI = "sips:" [ userinfo ] hostport
- uri-parameters [ headers ]
-userinfo = ( user / telephone-subscriber ) [ ":" password ] "@"
-user = 1*( unreserved / escaped / user-unreserved )
-user-unreserved = "&" / "=" / "+" / "$" / "," / ";" / "?" / "/"
-password = *( unreserved / escaped /
- "&" / "=" / "+" / "$" / "," )
-hostport = host [ ":" port ]
-host = hostname / IPv4address / IPv6reference
-hostname = *( domainlabel "." ) toplabel [ "." ]
-domainlabel = alphanum
- / alphanum *( alphanum / "-" ) alphanum
-toplabel = ALPHA / ALPHA *( alphanum / "-" ) alphanum
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 222]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
-IPv6reference = "[" IPv6address "]"
-IPv6address = hexpart [ ":" IPv4address ]
-hexpart = hexseq / hexseq "::" [ hexseq ] / "::" [ hexseq ]
-hexseq = hex4 *( ":" hex4)
-hex4 = 1*4HEXDIG
-port = 1*DIGIT
-
- The BNF for telephone-subscriber can be found in RFC 2806 [9]. Note,
- however, that any characters allowed there that are not allowed in
- the user part of the SIP URI MUST be escaped.
-
-uri-parameters = *( ";" uri-parameter)
-uri-parameter = transport-param / user-param / method-param
- / ttl-param / maddr-param / lr-param / other-param
-transport-param = "transport="
- ( "udp" / "tcp" / "sctp" / "tls"
- / other-transport)
-other-transport = token
-user-param = "user=" ( "phone" / "ip" / other-user)
-other-user = token
-method-param = "method=" Method
-ttl-param = "ttl=" ttl
-maddr-param = "maddr=" host
-lr-param = "lr"
-other-param = pname [ "=" pvalue ]
-pname = 1*paramchar
-pvalue = 1*paramchar
-paramchar = param-unreserved / unreserved / escaped
-param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
-
-headers = "?" header *( "&" header )
-header = hname "=" hvalue
-hname = 1*( hnv-unreserved / unreserved / escaped )
-hvalue = *( hnv-unreserved / unreserved / escaped )
-hnv-unreserved = "[" / "]" / "/" / "?" / ":" / "+" / "$"
-
-SIP-message = Request / Response
-Request = Request-Line
- *( message-header )
- CRLF
- [ message-body ]
-Request-Line = Method SP Request-URI SP SIP-Version CRLF
-Request-URI = SIP-URI / SIPS-URI / absoluteURI
-absoluteURI = scheme ":" ( hier-part / opaque-part )
-hier-part = ( net-path / abs-path ) [ "?" query ]
-net-path = "//" authority [ abs-path ]
-abs-path = "/" path-segments
-
-
-
-Rosenberg, et. al. Standards Track [Page 223]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-opaque-part = uric-no-slash *uric
-uric = reserved / unreserved / escaped
-uric-no-slash = unreserved / escaped / ";" / "?" / ":" / "@"
- / "&" / "=" / "+" / "$" / ","
-path-segments = segment *( "/" segment )
-segment = *pchar *( ";" param )
-param = *pchar
-pchar = unreserved / escaped /
- ":" / "@" / "&" / "=" / "+" / "$" / ","
-scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
-authority = srvr / reg-name
-srvr = [ [ userinfo "@" ] hostport ]
-reg-name = 1*( unreserved / escaped / "$" / ","
- / ";" / ":" / "@" / "&" / "=" / "+" )
-query = *uric
-SIP-Version = "SIP" "/" 1*DIGIT "." 1*DIGIT
-
-message-header = (Accept
- / Accept-Encoding
- / Accept-Language
- / Alert-Info
- / Allow
- / Authentication-Info
- / Authorization
- / Call-ID
- / Call-Info
- / Contact
- / Content-Disposition
- / Content-Encoding
- / Content-Language
- / Content-Length
- / Content-Type
- / CSeq
- / Date
- / Error-Info
- / Expires
- / From
- / In-Reply-To
- / Max-Forwards
- / MIME-Version
- / Min-Expires
- / Organization
- / Priority
- / Proxy-Authenticate
- / Proxy-Authorization
- / Proxy-Require
- / Record-Route
- / Reply-To
-
-
-
-Rosenberg, et. al. Standards Track [Page 224]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- / Require
- / Retry-After
- / Route
- / Server
- / Subject
- / Supported
- / Timestamp
- / To
- / Unsupported
- / User-Agent
- / Via
- / Warning
- / WWW-Authenticate
- / extension-header) CRLF
-
-INVITEm = %x49.4E.56.49.54.45 ; INVITE in caps
-ACKm = %x41.43.4B ; ACK in caps
-OPTIONSm = %x4F.50.54.49.4F.4E.53 ; OPTIONS in caps
-BYEm = %x42.59.45 ; BYE in caps
-CANCELm = %x43.41.4E.43.45.4C ; CANCEL in caps
-REGISTERm = %x52.45.47.49.53.54.45.52 ; REGISTER in caps
-Method = INVITEm / ACKm / OPTIONSm / BYEm
- / CANCELm / REGISTERm
- / extension-method
-extension-method = token
-Response = Status-Line
- *( message-header )
- CRLF
- [ message-body ]
-
-Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
-Status-Code = Informational
- / Redirection
- / Success
- / Client-Error
- / Server-Error
- / Global-Failure
- / extension-code
-extension-code = 3DIGIT
-Reason-Phrase = *(reserved / unreserved / escaped
- / UTF8-NONASCII / UTF8-CONT / SP / HTAB)
-
-Informational = "100" ; Trying
- / "180" ; Ringing
- / "181" ; Call Is Being Forwarded
- / "182" ; Queued
- / "183" ; Session Progress
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 225]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Success = "200" ; OK
-
-Redirection = "300" ; Multiple Choices
- / "301" ; Moved Permanently
- / "302" ; Moved Temporarily
- / "305" ; Use Proxy
- / "380" ; Alternative Service
-
-Client-Error = "400" ; Bad Request
- / "401" ; Unauthorized
- / "402" ; Payment Required
- / "403" ; Forbidden
- / "404" ; Not Found
- / "405" ; Method Not Allowed
- / "406" ; Not Acceptable
- / "407" ; Proxy Authentication Required
- / "408" ; Request Timeout
- / "410" ; Gone
- / "413" ; Request Entity Too Large
- / "414" ; Request-URI Too Large
- / "415" ; Unsupported Media Type
- / "416" ; Unsupported URI Scheme
- / "420" ; Bad Extension
- / "421" ; Extension Required
- / "423" ; Interval Too Brief
- / "480" ; Temporarily not available
- / "481" ; Call Leg/Transaction Does Not Exist
- / "482" ; Loop Detected
- / "483" ; Too Many Hops
- / "484" ; Address Incomplete
- / "485" ; Ambiguous
- / "486" ; Busy Here
- / "487" ; Request Terminated
- / "488" ; Not Acceptable Here
- / "491" ; Request Pending
- / "493" ; Undecipherable
-
-Server-Error = "500" ; Internal Server Error
- / "501" ; Not Implemented
- / "502" ; Bad Gateway
- / "503" ; Service Unavailable
- / "504" ; Server Time-out
- / "505" ; SIP Version not supported
- / "513" ; Message Too Large
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 226]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Global-Failure = "600" ; Busy Everywhere
- / "603" ; Decline
- / "604" ; Does not exist anywhere
- / "606" ; Not Acceptable
-
-Accept = "Accept" HCOLON
- [ accept-range *(COMMA accept-range) ]
-accept-range = media-range *(SEMI accept-param)
-media-range = ( "*/*"
- / ( m-type SLASH "*" )
- / ( m-type SLASH m-subtype )
- ) *( SEMI m-parameter )
-accept-param = ("q" EQUAL qvalue) / generic-param
-qvalue = ( "0" [ "." 0*3DIGIT ] )
- / ( "1" [ "." 0*3("0") ] )
-generic-param = token [ EQUAL gen-value ]
-gen-value = token / host / quoted-string
-
-Accept-Encoding = "Accept-Encoding" HCOLON
- [ encoding *(COMMA encoding) ]
-encoding = codings *(SEMI accept-param)
-codings = content-coding / "*"
-content-coding = token
-
-Accept-Language = "Accept-Language" HCOLON
- [ language *(COMMA language) ]
-language = language-range *(SEMI accept-param)
-language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) / "*" )
-
-Alert-Info = "Alert-Info" HCOLON alert-param *(COMMA alert-param)
-alert-param = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
-
-Allow = "Allow" HCOLON [Method *(COMMA Method)]
-
-Authorization = "Authorization" HCOLON credentials
-credentials = ("Digest" LWS digest-response)
- / other-response
-digest-response = dig-resp *(COMMA dig-resp)
-dig-resp = username / realm / nonce / digest-uri
- / dresponse / algorithm / cnonce
- / opaque / message-qop
- / nonce-count / auth-param
-username = "username" EQUAL username-value
-username-value = quoted-string
-digest-uri = "uri" EQUAL LDQUOT digest-uri-value RDQUOT
-digest-uri-value = rquest-uri ; Equal to request-uri as specified
- by HTTP/1.1
-message-qop = "qop" EQUAL qop-value
-
-
-
-Rosenberg, et. al. Standards Track [Page 227]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-cnonce = "cnonce" EQUAL cnonce-value
-cnonce-value = nonce-value
-nonce-count = "nc" EQUAL nc-value
-nc-value = 8LHEX
-dresponse = "response" EQUAL request-digest
-request-digest = LDQUOT 32LHEX RDQUOT
-auth-param = auth-param-name EQUAL
- ( token / quoted-string )
-auth-param-name = token
-other-response = auth-scheme LWS auth-param
- *(COMMA auth-param)
-auth-scheme = token
-
-Authentication-Info = "Authentication-Info" HCOLON ainfo
- *(COMMA ainfo)
-ainfo = nextnonce / message-qop
- / response-auth / cnonce
- / nonce-count
-nextnonce = "nextnonce" EQUAL nonce-value
-response-auth = "rspauth" EQUAL response-digest
-response-digest = LDQUOT *LHEX RDQUOT
-
-Call-ID = ( "Call-ID" / "i" ) HCOLON callid
-callid = word [ "@" word ]
-
-Call-Info = "Call-Info" HCOLON info *(COMMA info)
-info = LAQUOT absoluteURI RAQUOT *( SEMI info-param)
-info-param = ( "purpose" EQUAL ( "icon" / "info"
- / "card" / token ) ) / generic-param
-
-Contact = ("Contact" / "m" ) HCOLON
- ( STAR / (contact-param *(COMMA contact-param)))
-contact-param = (name-addr / addr-spec) *(SEMI contact-params)
-name-addr = [ display-name ] LAQUOT addr-spec RAQUOT
-addr-spec = SIP-URI / SIPS-URI / absoluteURI
-display-name = *(token LWS)/ quoted-string
-
-contact-params = c-p-q / c-p-expires
- / contact-extension
-c-p-q = "q" EQUAL qvalue
-c-p-expires = "expires" EQUAL delta-seconds
-contact-extension = generic-param
-delta-seconds = 1*DIGIT
-
-Content-Disposition = "Content-Disposition" HCOLON
- disp-type *( SEMI disp-param )
-disp-type = "render" / "session" / "icon" / "alert"
- / disp-extension-token
-
-
-
-Rosenberg, et. al. Standards Track [Page 228]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-disp-param = handling-param / generic-param
-handling-param = "handling" EQUAL
- ( "optional" / "required"
- / other-handling )
-other-handling = token
-disp-extension-token = token
-
-Content-Encoding = ( "Content-Encoding" / "e" ) HCOLON
- content-coding *(COMMA content-coding)
-
-Content-Language = "Content-Language" HCOLON
- language-tag *(COMMA language-tag)
-language-tag = primary-tag *( "-" subtag )
-primary-tag = 1*8ALPHA
-subtag = 1*8ALPHA
-
-Content-Length = ( "Content-Length" / "l" ) HCOLON 1*DIGIT
-Content-Type = ( "Content-Type" / "c" ) HCOLON media-type
-media-type = m-type SLASH m-subtype *(SEMI m-parameter)
-m-type = discrete-type / composite-type
-discrete-type = "text" / "image" / "audio" / "video"
- / "application" / extension-token
-composite-type = "message" / "multipart" / extension-token
-extension-token = ietf-token / x-token
-ietf-token = token
-x-token = "x-" token
-m-subtype = extension-token / iana-token
-iana-token = token
-m-parameter = m-attribute EQUAL m-value
-m-attribute = token
-m-value = token / quoted-string
-
-CSeq = "CSeq" HCOLON 1*DIGIT LWS Method
-
-Date = "Date" HCOLON SIP-date
-SIP-date = rfc1123-date
-rfc1123-date = wkday "," SP date1 SP time SP "GMT"
-date1 = 2DIGIT SP month SP 4DIGIT
- ; day month year (e.g., 02 Jun 1982)
-time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
- ; 00:00:00 - 23:59:59
-wkday = "Mon" / "Tue" / "Wed"
- / "Thu" / "Fri" / "Sat" / "Sun"
-month = "Jan" / "Feb" / "Mar" / "Apr"
- / "May" / "Jun" / "Jul" / "Aug"
- / "Sep" / "Oct" / "Nov" / "Dec"
-
-Error-Info = "Error-Info" HCOLON error-uri *(COMMA error-uri)
-
-
-
-Rosenberg, et. al. Standards Track [Page 229]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-error-uri = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
-
-Expires = "Expires" HCOLON delta-seconds
-From = ( "From" / "f" ) HCOLON from-spec
-from-spec = ( name-addr / addr-spec )
- *( SEMI from-param )
-from-param = tag-param / generic-param
-tag-param = "tag" EQUAL token
-
-In-Reply-To = "In-Reply-To" HCOLON callid *(COMMA callid)
-
-Max-Forwards = "Max-Forwards" HCOLON 1*DIGIT
-
-MIME-Version = "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT
-
-Min-Expires = "Min-Expires" HCOLON delta-seconds
-
-Organization = "Organization" HCOLON [TEXT-UTF8-TRIM]
-
-Priority = "Priority" HCOLON priority-value
-priority-value = "emergency" / "urgent" / "normal"
- / "non-urgent" / other-priority
-other-priority = token
-
-Proxy-Authenticate = "Proxy-Authenticate" HCOLON challenge
-challenge = ("Digest" LWS digest-cln *(COMMA digest-cln))
- / other-challenge
-other-challenge = auth-scheme LWS auth-param
- *(COMMA auth-param)
-digest-cln = realm / domain / nonce
- / opaque / stale / algorithm
- / qop-options / auth-param
-realm = "realm" EQUAL realm-value
-realm-value = quoted-string
-domain = "domain" EQUAL LDQUOT URI
- *( 1*SP URI ) RDQUOT
-URI = absoluteURI / abs-path
-nonce = "nonce" EQUAL nonce-value
-nonce-value = quoted-string
-opaque = "opaque" EQUAL quoted-string
-stale = "stale" EQUAL ( "true" / "false" )
-algorithm = "algorithm" EQUAL ( "MD5" / "MD5-sess"
- / token )
-qop-options = "qop" EQUAL LDQUOT qop-value
- *("," qop-value) RDQUOT
-qop-value = "auth" / "auth-int" / token
-
-Proxy-Authorization = "Proxy-Authorization" HCOLON credentials
-
-
-
-Rosenberg, et. al. Standards Track [Page 230]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Proxy-Require = "Proxy-Require" HCOLON option-tag
- *(COMMA option-tag)
-option-tag = token
-
-Record-Route = "Record-Route" HCOLON rec-route *(COMMA rec-route)
-rec-route = name-addr *( SEMI rr-param )
-rr-param = generic-param
-
-Reply-To = "Reply-To" HCOLON rplyto-spec
-rplyto-spec = ( name-addr / addr-spec )
- *( SEMI rplyto-param )
-rplyto-param = generic-param
-Require = "Require" HCOLON option-tag *(COMMA option-tag)
-
-Retry-After = "Retry-After" HCOLON delta-seconds
- [ comment ] *( SEMI retry-param )
-
-retry-param = ("duration" EQUAL delta-seconds)
- / generic-param
-
-Route = "Route" HCOLON route-param *(COMMA route-param)
-route-param = name-addr *( SEMI rr-param )
-
-Server = "Server" HCOLON server-val *(LWS server-val)
-server-val = product / comment
-product = token [SLASH product-version]
-product-version = token
-
-Subject = ( "Subject" / "s" ) HCOLON [TEXT-UTF8-TRIM]
-
-Supported = ( "Supported" / "k" ) HCOLON
- [option-tag *(COMMA option-tag)]
-
-Timestamp = "Timestamp" HCOLON 1*(DIGIT)
- [ "." *(DIGIT) ] [ LWS delay ]
-delay = *(DIGIT) [ "." *(DIGIT) ]
-
-To = ( "To" / "t" ) HCOLON ( name-addr
- / addr-spec ) *( SEMI to-param )
-to-param = tag-param / generic-param
-
-Unsupported = "Unsupported" HCOLON option-tag *(COMMA option-tag)
-User-Agent = "User-Agent" HCOLON server-val *(LWS server-val)
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 231]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Via = ( "Via" / "v" ) HCOLON via-parm *(COMMA via-parm)
-via-parm = sent-protocol LWS sent-by *( SEMI via-params )
-via-params = via-ttl / via-maddr
- / via-received / via-branch
- / via-extension
-via-ttl = "ttl" EQUAL ttl
-via-maddr = "maddr" EQUAL host
-via-received = "received" EQUAL (IPv4address / IPv6address)
-via-branch = "branch" EQUAL token
-via-extension = generic-param
-sent-protocol = protocol-name SLASH protocol-version
- SLASH transport
-protocol-name = "SIP" / token
-protocol-version = token
-transport = "UDP" / "TCP" / "TLS" / "SCTP"
- / other-transport
-sent-by = host [ COLON port ]
-ttl = 1*3DIGIT ; 0 to 255
-
-Warning = "Warning" HCOLON warning-value *(COMMA warning-value)
-warning-value = warn-code SP warn-agent SP warn-text
-warn-code = 3DIGIT
-warn-agent = hostport / pseudonym
- ; the name or pseudonym of the server adding
- ; the Warning header, for use in debugging
-warn-text = quoted-string
-pseudonym = token
-
-WWW-Authenticate = "WWW-Authenticate" HCOLON challenge
-
-extension-header = header-name HCOLON header-value
-header-name = token
-header-value = *(TEXT-UTF8char / UTF8-CONT / LWS)
-message-body = *OCTET
-
-26 Security Considerations: Threat Model and Security Usage
- Recommendations
-
- SIP is not an easy protocol to secure. Its use of intermediaries,
- its multi-faceted trust relationships, its expected usage between
- elements with no trust at all, and its user-to-user operation make
- security far from trivial. Security solutions are needed that are
- deployable today, without extensive coordination, in a wide variety
- of environments and usages. In order to meet these diverse needs,
- several distinct mechanisms applicable to different aspects and
- usages of SIP will be required.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 232]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Note that the security of SIP signaling itself has no bearing on the
- security of protocols used in concert with SIP such as RTP, or with
- the security implications of any specific bodies SIP might carry
- (although MIME security plays a substantial role in securing SIP).
- Any media associated with a session can be encrypted end-to-end
- independently of any associated SIP signaling. Media encryption is
- outside the scope of this document.
-
- The considerations that follow first examine a set of classic threat
- models that broadly identify the security needs of SIP. The set of
- security services required to address these threats is then detailed,
- followed by an explanation of several security mechanisms that can be
- used to provide these services. Next, the requirements for
- implementers of SIP are enumerated, along with exemplary deployments
- in which these security mechanisms could be used to improve the
- security of SIP. Some notes on privacy conclude this section.
-
-26.1 Attacks and Threat Models
-
- This section details some threats that should be common to most
- deployments of SIP. These threats have been chosen specifically to
- illustrate each of the security services that SIP requires.
-
- The following examples by no means provide an exhaustive list of the
- threats against SIP; rather, these are "classic" threats that
- demonstrate the need for particular security services that can
- potentially prevent whole categories of threats.
-
- These attacks assume an environment in which attackers can
- potentially read any packet on the network - it is anticipated that
- SIP will frequently be used on the public Internet. Attackers on the
- network may be able to modify packets (perhaps at some compromised
- intermediary). Attackers may wish to steal services, eavesdrop on
- communications, or disrupt sessions.
-
-26.1.1 Registration Hijacking
-
- The SIP registration mechanism allows a user agent to identify itself
- to a registrar as a device at which a user (designated by an address
- of record) is located. A registrar assesses the identity asserted in
- the From header field of a REGISTER message to determine whether this
- request can modify the contact addresses associated with the
- address-of-record in the To header field. While these two fields are
- frequently the same, there are many valid deployments in which a
- third-party may register contacts on a user's behalf.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 233]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The From header field of a SIP request, however, can be modified
- arbitrarily by the owner of a UA, and this opens the door to
- malicious registrations. An attacker that successfully impersonates
- a party authorized to change contacts associated with an address-of-
- record could, for example, de-register all existing contacts for a
- URI and then register their own device as the appropriate contact
- address, thereby directing all requests for the affected user to the
- attacker's device.
-
- This threat belongs to a family of threats that rely on the absence
- of cryptographic assurance of a request's originator. Any SIP UAS
- that represents a valuable service (a gateway that interworks SIP
- requests with traditional telephone calls, for example) might want to
- control access to its resources by authenticating requests that it
- receives. Even end-user UAs, for example SIP phones, have an
- interest in ascertaining the identities of originators of requests.
-
- This threat demonstrates the need for security services that enable
- SIP entities to authenticate the originators of requests.
-
-26.1.2 Impersonating a Server
-
- The domain to which a request is destined is generally specified in
- the Request-URI. UAs commonly contact a server in this domain
- directly in order to deliver a request. However, there is always a
- possibility that an attacker could impersonate the remote server, and
- that the UA's request could be intercepted by some other party.
-
- For example, consider a case in which a redirect server at one
- domain, chicago.com, impersonates a redirect server at another
- domain, biloxi.com. A user agent sends a request to biloxi.com, but
- the redirect server at chicago.com answers with a forged response
- that has appropriate SIP header fields for a response from
- biloxi.com. The forged contact addresses in the redirection response
- could direct the originating UA to inappropriate or insecure
- resources, or simply prevent requests for biloxi.com from succeeding.
-
- This family of threats has a vast membership, many of which are
- critical. As a converse to the registration hijacking threat,
- consider the case in which a registration sent to biloxi.com is
- intercepted by chicago.com, which replies to the intercepted
- registration with a forged 301 (Moved Permanently) response. This
- response might seem to come from biloxi.com yet designate chicago.com
- as the appropriate registrar. All future REGISTER requests from the
- originating UA would then go to chicago.com.
-
- Prevention of this threat requires a means by which UAs can
- authenticate the servers to whom they send requests.
-
-
-
-Rosenberg, et. al. Standards Track [Page 234]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-26.1.3 Tampering with Message Bodies
-
- As a matter of course, SIP UAs route requests through trusted proxy
- servers. Regardless of how that trust is established (authentication
- of proxies is discussed elsewhere in this section), a UA may trust a
- proxy server to route a request, but not to inspect or possibly
- modify the bodies contained in that request.
-
- Consider a UA that is using SIP message bodies to communicate session
- encryption keys for a media session. Although it trusts the proxy
- server of the domain it is contacting to deliver signaling properly,
- it may not want the administrators of that domain to be capable of
- decrypting any subsequent media session. Worse yet, if the proxy
- server were actively malicious, it could modify the session key,
- either acting as a man-in-the-middle, or perhaps changing the
- security characteristics requested by the originating UA.
-
- This family of threats applies not only to session keys, but to most
- conceivable forms of content carried end-to-end in SIP. These might
- include MIME bodies that should be rendered to the user, SDP, or
- encapsulated telephony signals, among others. Attackers might
- attempt to modify SDP bodies, for example, in order to point RTP
- media streams to a wiretapping device in order to eavesdrop on
- subsequent voice communications.
-
- Also note that some header fields in SIP are meaningful end-to-end,
- for example, Subject. UAs might be protective of these header fields
- as well as bodies (a malicious intermediary changing the Subject
- header field might make an important request appear to be spam, for
- example). However, since many header fields are legitimately
- inspected or altered by proxy servers as a request is routed, not all
- header fields should be secured end-to-end.
-
- For these reasons, the UA might want to secure SIP message bodies,
- and in some limited cases header fields, end-to-end. The security
- services required for bodies include confidentiality, integrity, and
- authentication. These end-to-end services should be independent of
- the means used to secure interactions with intermediaries such as
- proxy servers.
-
-26.1.4 Tearing Down Sessions
-
- Once a dialog has been established by initial messaging, subsequent
- requests can be sent that modify the state of the dialog and/or
- session. It is critical that principals in a session can be certain
- that such requests are not forged by attackers.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 235]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Consider a case in which a third-party attacker captures some initial
- messages in a dialog shared by two parties in order to learn the
- parameters of the session (To tag, From tag, and so forth) and then
- inserts a BYE request into the session. The attacker could opt to
- forge the request such that it seemed to come from either
- participant. Once the BYE is received by its target, the session
- will be torn down prematurely.
-
- Similar mid-session threats include the transmission of forged re-
- INVITEs that alter the session (possibly to reduce session security
- or redirect media streams as part of a wiretapping attack).
-
- The most effective countermeasure to this threat is the
- authentication of the sender of the BYE. In this instance, the
- recipient needs only know that the BYE came from the same party with
- whom the corresponding dialog was established (as opposed to
- ascertaining the absolute identity of the sender). Also, if the
- attacker is unable to learn the parameters of the session due to
- confidentiality, it would not be possible to forge the BYE. However,
- some intermediaries (like proxy servers) will need to inspect those
- parameters as the session is established.
-
-26.1.5 Denial of Service and Amplification
-
- Denial-of-service attacks focus on rendering a particular network
- element unavailable, usually by directing an excessive amount of
- network traffic at its interfaces. A distributed denial-of-service
- attack allows one network user to cause multiple network hosts to
- flood a target host with a large amount of network traffic.
-
- In many architectures, SIP proxy servers face the public Internet in
- order to accept requests from worldwide IP endpoints. SIP creates a
- number of potential opportunities for distributed denial-of-service
- attacks that must be recognized and addressed by the implementers and
- operators of SIP systems.
-
- Attackers can create bogus requests that contain a falsified source
- IP address and a corresponding Via header field that identify a
- targeted host as the originator of the request and then send this
- request to a large number of SIP network elements, thereby using
- hapless SIP UAs or proxies to generate denial-of-service traffic
- aimed at the target.
-
- Similarly, attackers might use falsified Route header field values in
- a request that identify the target host and then send such messages
- to forking proxies that will amplify messaging sent to the target.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 236]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Record-Route could be used to similar effect when the attacker is
- certain that the SIP dialog initiated by the request will result in
- numerous transactions originating in the backwards direction.
-
- A number of denial-of-service attacks open up if REGISTER requests
- are not properly authenticated and authorized by registrars.
- Attackers could de-register some or all users in an administrative
- domain, thereby preventing these users from being invited to new
- sessions. An attacker could also register a large number of contacts
- designating the same host for a given address-of-record in order to
- use the registrar and any associated proxy servers as amplifiers in a
- denial-of-service attack. Attackers might also attempt to deplete
- available memory and disk resources of a registrar by registering
- huge numbers of bindings.
-
- The use of multicast to transmit SIP requests can greatly increase
- the potential for denial-of-service attacks.
-
- These problems demonstrate a general need to define architectures
- that minimize the risks of denial-of-service, and the need to be
- mindful in recommendations for security mechanisms of this class of
- attacks.
-
-26.2 Security Mechanisms
-
- From the threats described above, we gather that the fundamental
- security services required for the SIP protocol are: preserving the
- confidentiality and integrity of messaging, preventing replay attacks
- or message spoofing, providing for the authentication and privacy of
- the participants in a session, and preventing denial-of-service
- attacks. Bodies within SIP messages separately require the security
- services of confidentiality, integrity, and authentication.
-
- Rather than defining new security mechanisms specific to SIP, SIP
- reuses wherever possible existing security models derived from the
- HTTP and SMTP space.
-
- Full encryption of messages provides the best means to preserve the
- confidentiality of signaling - it can also guarantee that messages
- are not modified by any malicious intermediaries. However, SIP
- requests and responses cannot be naively encrypted end-to-end in
- their entirety because message fields such as the Request-URI, Route,
- and Via need to be visible to proxies in most network architectures
- so that SIP requests are routed correctly. Note that proxy servers
- need to modify some features of messages as well (such as adding Via
- header field values) in order for SIP to function. Proxy servers
- must therefore be trusted, to some degree, by SIP UAs. To this
- purpose, low-layer security mechanisms for SIP are recommended, which
-
-
-
-Rosenberg, et. al. Standards Track [Page 237]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- encrypt the entire SIP requests or responses on the wire on a hop-
- by-hop basis, and that allow endpoints to verify the identity of
- proxy servers to whom they send requests.
-
- SIP entities also have a need to identify one another in a secure
- fashion. When a SIP endpoint asserts the identity of its user to a
- peer UA or to a proxy server, that identity should in some way be
- verifiable. A cryptographic authentication mechanism is provided in
- SIP to address this requirement.
-
- An independent security mechanism for SIP message bodies supplies an
- alternative means of end-to-end mutual authentication, as well as
- providing a limit on the degree to which user agents must trust
- intermediaries.
-
-26.2.1 Transport and Network Layer Security
-
- Transport or network layer security encrypts signaling traffic,
- guaranteeing message confidentiality and integrity.
-
- Oftentimes, certificates are used in the establishment of lower-layer
- security, and these certificates can also be used to provide a means
- of authentication in many architectures.
-
- Two popular alternatives for providing security at the transport and
- network layer are, respectively, TLS [25] and IPSec [26].
-
- IPSec is a set of network-layer protocol tools that collectively can
- be used as a secure replacement for traditional IP (Internet
- Protocol). IPSec is most commonly used in architectures in which a
- set of hosts or administrative domains have an existing trust
- relationship with one another. IPSec is usually implemented at the
- operating system level in a host, or on a security gateway that
- provides confidentiality and integrity for all traffic it receives
- from a particular interface (as in a VPN architecture). IPSec can
- also be used on a hop-by-hop basis.
-
- In many architectures IPSec does not require integration with SIP
- applications; IPSec is perhaps best suited to deployments in which
- adding security directly to SIP hosts would be arduous. UAs that
- have a pre-shared keying relationship with their first-hop proxy
- server are also good candidates to use IPSec. Any deployment of
- IPSec for SIP would require an IPSec profile describing the protocol
- tools that would be required to secure SIP. No such profile is given
- in this document.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 238]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- TLS provides transport-layer security over connection-oriented
- protocols (for the purposes of this document, TCP); "tls" (signifying
- TLS over TCP) can be specified as the desired transport protocol
- within a Via header field value or a SIP-URI. TLS is most suited to
- architectures in which hop-by-hop security is required between hosts
- with no pre-existing trust association. For example, Alice trusts
- her local proxy server, which after a certificate exchange decides to
- trust Bob's local proxy server, which Bob trusts, hence Bob and Alice
- can communicate securely.
-
- TLS must be tightly coupled with a SIP application. Note that
- transport mechanisms are specified on a hop-by-hop basis in SIP, thus
- a UA that sends requests over TLS to a proxy server has no assurance
- that TLS will be used end-to-end.
-
- The TLS_RSA_WITH_AES_128_CBC_SHA ciphersuite [6] MUST be supported at
- a minimum by implementers when TLS is used in a SIP application. For
- purposes of backwards compatibility, proxy servers, redirect servers,
- and registrars SHOULD support TLS_RSA_WITH_3DES_EDE_CBC_SHA.
- Implementers MAY also support any other ciphersuite.
-
-26.2.2 SIPS URI Scheme
-
- The SIPS URI scheme adheres to the syntax of the SIP URI (described
- in 19), although the scheme string is "sips" rather than "sip". The
- semantics of SIPS are very different from the SIP URI, however. SIPS
- allows resources to specify that they should be reached securely.
-
- A SIPS URI can be used as an address-of-record for a particular user
- - the URI by which the user is canonically known (on their business
- cards, in the From header field of their requests, in the To header
- field of REGISTER requests). When used as the Request-URI of a
- request, the SIPS scheme signifies that each hop over which the
- request is forwarded, until the request reaches the SIP entity
- responsible for the domain portion of the Request-URI, must be
- secured with TLS; once it reaches the domain in question it is
- handled in accordance with local security and routing policy, quite
- possibly using TLS for any last hop to a UAS. When used by the
- originator of a request (as would be the case if they employed a SIPS
- URI as the address-of-record of the target), SIPS dictates that the
- entire request path to the target domain be so secured.
-
- The SIPS scheme is applicable to many of the other ways in which SIP
- URIs are used in SIP today in addition to the Request-URI, including
- in addresses-of-record, contact addresses (the contents of Contact
- headers, including those of REGISTER methods), and Route headers. In
- each instance, the SIPS URI scheme allows these existing fields to
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 239]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- designate secure resources. The manner in which a SIPS URI is
- dereferenced in any of these contexts has its own security properties
- which are detailed in [4].
-
- The use of SIPS in particular entails that mutual TLS authentication
- SHOULD be employed, as SHOULD the ciphersuite
- TLS_RSA_WITH_AES_128_CBC_SHA. Certificates received in the
- authentication process SHOULD be validated with root certificates
- held by the client; failure to validate a certificate SHOULD result
- in the failure of the request.
-
- Note that in the SIPS URI scheme, transport is independent of TLS,
- and thus "sips:alice@atlanta.com;transport=tcp" and
- "sips:alice@atlanta.com;transport=sctp" are both valid (although
- note that UDP is not a valid transport for SIPS). The use of
- "transport=tls" has consequently been deprecated, partly because
- it was specific to a single hop of the request. This is a change
- since RFC 2543.
-
- Users that distribute a SIPS URI as an address-of-record may elect to
- operate devices that refuse requests over insecure transports.
-
-26.2.3 HTTP Authentication
-
- SIP provides a challenge capability, based on HTTP authentication,
- that relies on the 401 and 407 response codes as well as header
- fields for carrying challenges and credentials. Without significant
- modification, the reuse of the HTTP Digest authentication scheme in
- SIP allows for replay protection and one-way authentication.
-
- The usage of Digest authentication in SIP is detailed in Section 22.
-
-26.2.4 S/MIME
-
- As is discussed above, encrypting entire SIP messages end-to-end for
- the purpose of confidentiality is not appropriate because network
- intermediaries (like proxy servers) need to view certain header
- fields in order to route messages correctly, and if these
- intermediaries are excluded from security associations, then SIP
- messages will essentially be non-routable.
-
- However, S/MIME allows SIP UAs to encrypt MIME bodies within SIP,
- securing these bodies end-to-end without affecting message headers.
- S/MIME can provide end-to-end confidentiality and integrity for
- message bodies, as well as mutual authentication. It is also
- possible to use S/MIME to provide a form of integrity and
- confidentiality for SIP header fields through SIP message tunneling.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 240]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The usage of S/MIME in SIP is detailed in Section 23.
-
-26.3 Implementing Security Mechanisms
-
-26.3.1 Requirements for Implementers of SIP
-
- Proxy servers, redirect servers, and registrars MUST implement TLS,
- and MUST support both mutual and one-way authentication. It is
- strongly RECOMMENDED that UAs be capable initiating TLS; UAs MAY also
- be capable of acting as a TLS server. Proxy servers, redirect
- servers, and registrars SHOULD possess a site certificate whose
- subject corresponds to their canonical hostname. UAs MAY have
- certificates of their own for mutual authentication with TLS, but no
- provisions are set forth in this document for their use. All SIP
- elements that support TLS MUST have a mechanism for validating
- certificates received during TLS negotiation; this entails possession
- of one or more root certificates issued by certificate authorities
- (preferably well-known distributors of site certificates comparable
- to those that issue root certificates for web browsers).
-
- All SIP elements that support TLS MUST also support the SIPS URI
- scheme.
-
- Proxy servers, redirect servers, registrars, and UAs MAY also
- implement IPSec or other lower-layer security protocols.
-
- When a UA attempts to contact a proxy server, redirect server, or
- registrar, the UAC SHOULD initiate a TLS connection over which it
- will send SIP messages. In some architectures, UASs MAY receive
- requests over such TLS connections as well.
-
- Proxy servers, redirect servers, registrars, and UAs MUST implement
- Digest Authorization, encompassing all of the aspects required in 22.
- Proxy servers, redirect servers, and registrars SHOULD be configured
- with at least one Digest realm, and at least one "realm" string
- supported by a given server SHOULD correspond to the server's
- hostname or domainname.
-
- UAs MAY support the signing and encrypting of MIME bodies, and
- transference of credentials with S/MIME as described in Section 23.
- If a UA holds one or more root certificates of certificate
- authorities in order to validate certificates for TLS or IPSec, it
- SHOULD be capable of reusing these to verify S/MIME certificates, as
- appropriate. A UA MAY hold root certificates specifically for
- validating S/MIME certificates.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 241]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Note that is it anticipated that future security extensions may
- upgrade the normative strength associated with S/MIME as S/MIME
- implementations appear and the problem space becomes better
- understood.
-
-26.3.2 Security Solutions
-
- The operation of these security mechanisms in concert can follow the
- existing web and email security models to some degree. At a high
- level, UAs authenticate themselves to servers (proxy servers,
- redirect servers, and registrars) with a Digest username and
- password; servers authenticate themselves to UAs one hop away, or to
- another server one hop away (and vice versa), with a site certificate
- delivered by TLS.
-
- On a peer-to-peer level, UAs trust the network to authenticate one
- another ordinarily; however, S/MIME can also be used to provide
- direct authentication when the network does not, or if the network
- itself is not trusted.
-
- The following is an illustrative example in which these security
- mechanisms are used by various UAs and servers to prevent the sorts
- of threats described in Section 26.1. While implementers and network
- administrators MAY follow the normative guidelines given in the
- remainder of this section, these are provided only as example
- implementations.
-
-26.3.2.1 Registration
-
- When a UA comes online and registers with its local administrative
- domain, it SHOULD establish a TLS connection with its registrar
- (Section 10 describes how the UA reaches its registrar). The
- registrar SHOULD offer a certificate to the UA, and the site
- identified by the certificate MUST correspond with the domain in
- which the UA intends to register; for example, if the UA intends to
- register the address-of-record 'alice@atlanta.com', the site
- certificate must identify a host within the atlanta.com domain (such
- as sip.atlanta.com). When it receives the TLS Certificate message,
- the UA SHOULD verify the certificate and inspect the site identified
- by the certificate. If the certificate is invalid, revoked, or if it
- does not identify the appropriate party, the UA MUST NOT send the
- REGISTER message and otherwise proceed with the registration.
-
- When a valid certificate has been provided by the registrar, the
- UA knows that the registrar is not an attacker who might redirect
- the UA, steal passwords, or attempt any similar attacks.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 242]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The UA then creates a REGISTER request that SHOULD be addressed to a
- Request-URI corresponding to the site certificate received from the
- registrar. When the UA sends the REGISTER request over the existing
- TLS connection, the registrar SHOULD challenge the request with a 401
- (Proxy Authentication Required) response. The "realm" parameter
- within the Proxy-Authenticate header field of the response SHOULD
- correspond to the domain previously given by the site certificate.
- When the UAC receives the challenge, it SHOULD either prompt the user
- for credentials or take an appropriate credential from a keyring
- corresponding to the "realm" parameter in the challenge. The
- username of this credential SHOULD correspond with the "userinfo"
- portion of the URI in the To header field of the REGISTER request.
- Once the Digest credentials have been inserted into an appropriate
- Proxy-Authorization header field, the REGISTER should be resubmitted
- to the registrar.
-
- Since the registrar requires the user agent to authenticate
- itself, it would be difficult for an attacker to forge REGISTER
- requests for the user's address-of-record. Also note that since
- the REGISTER is sent over a confidential TLS connection, attackers
- will not be able to intercept the REGISTER to record credentials
- for any possible replay attack.
-
- Once the registration has been accepted by the registrar, the UA
- SHOULD leave this TLS connection open provided that the registrar
- also acts as the proxy server to which requests are sent for users in
- this administrative domain. The existing TLS connection will be
- reused to deliver incoming requests to the UA that has just completed
- registration.
-
- Because the UA has already authenticated the server on the other
- side of the TLS connection, all requests that come over this
- connection are known to have passed through the proxy server -
- attackers cannot create spoofed requests that appear to have been
- sent through that proxy server.
-
-26.3.2.2 Interdomain Requests
-
- Now let's say that Alice's UA would like to initiate a session with a
- user in a remote administrative domain, namely "bob@biloxi.com". We
- will also say that the local administrative domain (atlanta.com) has
- a local outbound proxy.
-
- The proxy server that handles inbound requests for an administrative
- domain MAY also act as a local outbound proxy; for simplicity's sake
- we'll assume this to be the case for atlanta.com (otherwise the user
- agent would initiate a new TLS connection to a separate server at
- this point). Assuming that the client has completed the registration
-
-
-
-Rosenberg, et. al. Standards Track [Page 243]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- process described in the preceding section, it SHOULD reuse the TLS
- connection to the local proxy server when it sends an INVITE request
- to another user. The UA SHOULD reuse cached credentials in the
- INVITE to avoid prompting the user unnecessarily.
-
- When the local outbound proxy server has validated the credentials
- presented by the UA in the INVITE, it SHOULD inspect the Request-URI
- to determine how the message should be routed (see [4]). If the
- "domainname" portion of the Request-URI had corresponded to the local
- domain (atlanta.com) rather than biloxi.com, then the proxy server
- would have consulted its location service to determine how best to
- reach the requested user.
-
- Had "alice@atlanta.com" been attempting to contact, say,
- "alex@atlanta.com", the local proxy would have proxied to the
- request to the TLS connection Alex had established with the
- registrar when he registered. Since Alex would receive this
- request over his authenticated channel, he would be assured that
- Alice's request had been authorized by the proxy server of the
- local administrative domain.
-
- However, in this instance the Request-URI designates a remote domain.
- The local outbound proxy server at atlanta.com SHOULD therefore
- establish a TLS connection with the remote proxy server at
- biloxi.com. Since both of the participants in this TLS connection
- are servers that possess site certificates, mutual TLS authentication
- SHOULD occur. Each side of the connection SHOULD verify and inspect
- the certificate of the other, noting the domain name that appears in
- the certificate for comparison with the header fields of SIP
- messages. The atlanta.com proxy server, for example, SHOULD verify
- at this stage that the certificate received from the remote side
- corresponds with the biloxi.com domain. Once it has done so, and TLS
- negotiation has completed, resulting in a secure channel between the
- two proxies, the atlanta.com proxy can forward the INVITE request to
- biloxi.com.
-
- The proxy server at biloxi.com SHOULD inspect the certificate of the
- proxy server at atlanta.com in turn and compare the domain asserted
- by the certificate with the "domainname" portion of the From header
- field in the INVITE request. The biloxi proxy MAY have a strict
- security policy that requires it to reject requests that do not match
- the administrative domain from which they have been proxied.
-
- Such security policies could be instituted to prevent the SIP
- equivalent of SMTP 'open relays' that are frequently exploited to
- generate spam.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 244]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- This policy, however, only guarantees that the request came from the
- domain it ascribes to itself; it does not allow biloxi.com to
- ascertain how atlanta.com authenticated Alice. Only if biloxi.com
- has some other way of knowing atlanta.com's authentication policies
- could it possibly ascertain how Alice proved her identity.
- biloxi.com might then institute an even stricter policy that forbids
- requests that come from domains that are not known administratively
- to share a common authentication policy with biloxi.com.
-
- Once the INVITE has been approved by the biloxi proxy, the proxy
- server SHOULD identify the existing TLS channel, if any, associated
- with the user targeted by this request (in this case
- "bob@biloxi.com"). The INVITE should be proxied through this channel
- to Bob. Since the request is received over a TLS connection that had
- previously been authenticated as the biloxi proxy, Bob knows that the
- From header field was not tampered with and that atlanta.com has
- validated Alice, although not necessarily whether or not to trust
- Alice's identity.
-
- Before they forward the request, both proxy servers SHOULD add a
- Record-Route header field to the request so that all future requests
- in this dialog will pass through the proxy servers. The proxy
- servers can thereby continue to provide security services for the
- lifetime of this dialog. If the proxy servers do not add themselves
- to the Record-Route, future messages will pass directly end-to-end
- between Alice and Bob without any security services (unless the two
- parties agree on some independent end-to-end security such as
- S/MIME). In this respect the SIP trapezoid model can provide a nice
- structure where conventions of agreement between the site proxies can
- provide a reasonably secure channel between Alice and Bob.
-
- An attacker preying on this architecture would, for example, be
- unable to forge a BYE request and insert it into the signaling
- stream between Bob and Alice because the attacker has no way of
- ascertaining the parameters of the session and also because the
- integrity mechanism transitively protects the traffic between
- Alice and Bob.
-
-26.3.2.3 Peer-to-Peer Requests
-
- Alternatively, consider a UA asserting the identity
- "carol@chicago.com" that has no local outbound proxy. When Carol
- wishes to send an INVITE to "bob@biloxi.com", her UA SHOULD initiate
- a TLS connection with the biloxi proxy directly (using the mechanism
- described in [4] to determine how to best to reach the given
- Request-URI). When her UA receives a certificate from the biloxi
- proxy, it SHOULD be verified normally before she passes her INVITE
- across the TLS connection. However, Carol has no means of proving
-
-
-
-Rosenberg, et. al. Standards Track [Page 245]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- her identity to the biloxi proxy, but she does have a CMS-detached
- signature over a "message/sip" body in the INVITE. It is unlikely in
- this instance that Carol would have any credentials in the biloxi.com
- realm, since she has no formal association with biloxi.com. The
- biloxi proxy MAY also have a strict policy that precludes it from
- even bothering to challenge requests that do not have biloxi.com in
- the "domainname" portion of the From header field - it treats these
- users as unauthenticated.
-
- The biloxi proxy has a policy for Bob that all non-authenticated
- requests should be redirected to the appropriate contact address
- registered against 'bob@biloxi.com', namely <sip:bob@192.0.2.4>.
- Carol receives the redirection response over the TLS connection she
- established with the biloxi proxy, so she trusts the veracity of the
- contact address.
-
- Carol SHOULD then establish a TCP connection with the designated
- address and send a new INVITE with a Request-URI containing the
- received contact address (recomputing the signature in the body as
- the request is readied). Bob receives this INVITE on an insecure
- interface, but his UA inspects and, in this instance, recognizes the
- From header field of the request and subsequently matches a locally
- cached certificate with the one presented in the signature of the
- body of the INVITE. He replies in similar fashion, authenticating
- himself to Carol, and a secure dialog begins.
-
- Sometimes firewalls or NATs in an administrative domain could
- preclude the establishment of a direct TCP connection to a UA. In
- these cases, proxy servers could also potentially relay requests
- to UAs in a way that has no trust implications (for example,
- forgoing an existing TLS connection and forwarding the request
- over cleartext TCP) as local policy dictates.
-
-26.3.2.4 DoS Protection
-
- In order to minimize the risk of a denial-of-service attack against
- architectures using these security solutions, implementers should
- take note of the following guidelines.
-
- When the host on which a SIP proxy server is operating is routable
- from the public Internet, it SHOULD be deployed in an administrative
- domain with defensive operational policies (blocking source-routed
- traffic, preferably filtering ping traffic). Both TLS and IPSec can
- also make use of bastion hosts at the edges of administrative domains
- that participate in the security associations to aggregate secure
- tunnels and sockets. These bastion hosts can also take the brunt of
- denial-of-service attacks, ensuring that SIP hosts within the
- administrative domain are not encumbered with superfluous messaging.
-
-
-
-Rosenberg, et. al. Standards Track [Page 246]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- No matter what security solutions are deployed, floods of messages
- directed at proxy servers can lock up proxy server resources and
- prevent desirable traffic from reaching its destination. There is a
- computational expense associated with processing a SIP transaction at
- a proxy server, and that expense is greater for stateful proxy
- servers than it is for stateless proxy servers. Therefore, stateful
- proxies are more susceptible to flooding than stateless proxy
- servers.
-
- UAs and proxy servers SHOULD challenge questionable requests with
- only a single 401 (Unauthorized) or 407 (Proxy Authentication
- Required), forgoing the normal response retransmission algorithm, and
- thus behaving statelessly towards unauthenticated requests.
-
- Retransmitting the 401 (Unauthorized) or 407 (Proxy Authentication
- Required) status response amplifies the problem of an attacker
- using a falsified header field value (such as Via) to direct
- traffic to a third party.
-
- In summary, the mutual authentication of proxy servers through
- mechanisms such as TLS significantly reduces the potential for rogue
- intermediaries to introduce falsified requests or responses that can
- deny service. This commensurately makes it harder for attackers to
- make innocent SIP nodes into agents of amplification.
-
-26.4 Limitations
-
- Although these security mechanisms, when applied in a judicious
- manner, can thwart many threats, there are limitations in the scope
- of the mechanisms that must be understood by implementers and network
- operators.
-
-26.4.1 HTTP Digest
-
- One of the primary limitations of using HTTP Digest in SIP is that
- the integrity mechanisms in Digest do not work very well for SIP.
- Specifically, they offer protection of the Request-URI and the method
- of a message, but not for any of the header fields that UAs would
- most likely wish to secure.
-
- The existing replay protection mechanisms described in RFC 2617 also
- have some limitations for SIP. The next-nonce mechanism, for
- example, does not support pipelined requests. The nonce-count
- mechanism should be used for replay protection.
-
- Another limitation of HTTP Digest is the scope of realms. Digest is
- valuable when a user wants to authenticate themselves to a resource
- with which they have a pre-existing association, like a service
-
-
-
-Rosenberg, et. al. Standards Track [Page 247]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- provider of which the user is a customer (which is quite a common
- scenario and thus Digest provides an extremely useful function). By
- way of contrast, the scope of TLS is interdomain or multirealm, since
- certificates are often globally verifiable, so that the UA can
- authenticate the server with no pre-existing association.
-
-26.4.2 S/MIME
-
- The largest outstanding defect with the S/MIME mechanism is the lack
- of a prevalent public key infrastructure for end users. If self-
- signed certificates (or certificates that cannot be verified by one
- of the participants in a dialog) are used, the SIP-based key exchange
- mechanism described in Section 23.2 is susceptible to a man-in-the-
- middle attack with which an attacker can potentially inspect and
- modify S/MIME bodies. The attacker needs to intercept the first
- exchange of keys between the two parties in a dialog, remove the
- existing CMS-detached signatures from the request and response, and
- insert a different CMS-detached signature containing a certificate
- supplied by the attacker (but which seems to be a certificate for the
- proper address-of-record). Each party will think they have exchanged
- keys with the other, when in fact each has the public key of the
- attacker.
-
- It is important to note that the attacker can only leverage this
- vulnerability on the first exchange of keys between two parties - on
- subsequent occasions, the alteration of the key would be noticeable
- to the UAs. It would also be difficult for the attacker to remain in
- the path of all future dialogs between the two parties over time (as
- potentially days, weeks, or years pass).
-
- SSH is susceptible to the same man-in-the-middle attack on the first
- exchange of keys; however, it is widely acknowledged that while SSH
- is not perfect, it does improve the security of connections. The use
- of key fingerprints could provide some assistance to SIP, just as it
- does for SSH. For example, if two parties use SIP to establish a
- voice communications session, each could read off the fingerprint of
- the key they received from the other, which could be compared against
- the original. It would certainly be more difficult for the man-in-
- the-middle to emulate the voices of the participants than their
- signaling (a practice that was used with the Clipper chip-based
- secure telephone).
-
- The S/MIME mechanism allows UAs to send encrypted requests without
- preamble if they possess a certificate for the destination address-
- of-record on their keyring. However, it is possible that any
- particular device registered for an address-of-record will not hold
- the certificate that has been previously employed by the device's
- current user, and that it will therefore be unable to process an
-
-
-
-Rosenberg, et. al. Standards Track [Page 248]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- encrypted request properly, which could lead to some avoidable error
- signaling. This is especially likely when an encrypted request is
- forked.
-
- The keys associated with S/MIME are most useful when associated with
- a particular user (an address-of-record) rather than a device (a UA).
- When users move between devices, it may be difficult to transport
- private keys securely between UAs; how such keys might be acquired by
- a device is outside the scope of this document.
-
- Another, more prosaic difficulty with the S/MIME mechanism is that it
- can result in very large messages, especially when the SIP tunneling
- mechanism described in Section 23.4 is used. For that reason, it is
- RECOMMENDED that TCP should be used as a transport protocol when
- S/MIME tunneling is employed.
-
-26.4.3 TLS
-
- The most commonly voiced concern about TLS is that it cannot run over
- UDP; TLS requires a connection-oriented underlying transport
- protocol, which for the purposes of this document means TCP.
-
- It may also be arduous for a local outbound proxy server and/or
- registrar to maintain many simultaneous long-lived TLS connections
- with numerous UAs. This introduces some valid scalability concerns,
- especially for intensive ciphersuites. Maintaining redundancy of
- long-lived TLS connections, especially when a UA is solely
- responsible for their establishment, could also be cumbersome.
-
- TLS only allows SIP entities to authenticate servers to which they
- are adjacent; TLS offers strictly hop-by-hop security. Neither TLS,
- nor any other mechanism specified in this document, allows clients to
- authenticate proxy servers to whom they cannot form a direct TCP
- connection.
-
-26.4.4 SIPS URIs
-
- Actually using TLS on every segment of a request path entails that
- the terminating UAS must be reachable over TLS (perhaps registering
- with a SIPS URI as a contact address). This is the preferred use of
- SIPS. Many valid architectures, however, use TLS to secure part of
- the request path, but rely on some other mechanism for the final hop
- to a UAS, for example. Thus SIPS cannot guarantee that TLS usage
- will be truly end-to-end. Note that since many UAs will not accept
- incoming TLS connections, even those UAs that do support TLS may be
- required to maintain persistent TLS connections as described in the
- TLS limitations section above in order to receive requests over TLS
- as a UAS.
-
-
-
-Rosenberg, et. al. Standards Track [Page 249]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Location services are not required to provide a SIPS binding for a
- SIPS Request-URI. Although location services are commonly populated
- by user registrations (as described in Section 10.2.1), various other
- protocols and interfaces could conceivably supply contact addresses
- for an AOR, and these tools are free to map SIPS URIs to SIP URIs as
- appropriate. When queried for bindings, a location service returns
- its contact addresses without regard for whether it received a
- request with a SIPS Request-URI. If a redirect server is accessing
- the location service, it is up to the entity that processes the
- Contact header field of a redirection to determine the propriety of
- the contact addresses.
-
- Ensuring that TLS will be used for all of the request segments up to
- the target domain is somewhat complex. It is possible that
- cryptographically authenticated proxy servers along the way that are
- non-compliant or compromised may choose to disregard the forwarding
- rules associated with SIPS (and the general forwarding rules in
- Section 16.6). Such malicious intermediaries could, for example,
- retarget a request from a SIPS URI to a SIP URI in an attempt to
- downgrade security.
-
- Alternatively, an intermediary might legitimately retarget a request
- from a SIP to a SIPS URI. Recipients of a request whose Request-URI
- uses the SIPS URI scheme thus cannot assume on the basis of the
- Request-URI alone that SIPS was used for the entire request path
- (from the client onwards).
-
- To address these concerns, it is RECOMMENDED that recipients of a
- request whose Request-URI contains a SIP or SIPS URI inspect the To
- header field value to see if it contains a SIPS URI (though note that
- it does not constitute a breach of security if this URI has the same
- scheme but is not equivalent to the URI in the To header field).
- Although clients may choose to populate the Request-URI and To header
- field of a request differently, when SIPS is used this disparity
- could be interpreted as a possible security violation, and the
- request could consequently be rejected by its recipient. Recipients
- MAY also inspect the Via header chain in order to double-check
- whether or not TLS was used for the entire request path until the
- local administrative domain was reached. S/MIME may also be used by
- the originating UAC to help ensure that the original form of the To
- header field is carried end-to-end.
-
- If the UAS has reason to believe that the scheme of the Request-URI
- has been improperly modified in transit, the UA SHOULD notify its
- user of a potential security breach.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 250]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- As a further measure to prevent downgrade attacks, entities that
- accept only SIPS requests MAY also refuse connections on insecure
- ports.
-
- End users will undoubtedly discern the difference between SIPS and
- SIP URIs, and they may manually edit them in response to stimuli.
- This can either benefit or degrade security. For example, if an
- attacker corrupts a DNS cache, inserting a fake record set that
- effectively removes all SIPS records for a proxy server, then any
- SIPS requests that traverse this proxy server may fail. When a user,
- however, sees that repeated calls to a SIPS AOR are failing, they
- could on some devices manually convert the scheme from SIPS to SIP
- and retry. Of course, there are some safeguards against this (if the
- destination UA is truly paranoid it could refuse all non-SIPS
- requests), but it is a limitation worth noting. On the bright side,
- users might also divine that 'SIPS' would be valid even when they are
- presented only with a SIP URI.
-
-26.5 Privacy
-
- SIP messages frequently contain sensitive information about their
- senders - not just what they have to say, but with whom they
- communicate, when they communicate and for how long, and from where
- they participate in sessions. Many applications and their users
- require that this sort of private information be hidden from any
- parties that do not need to know it.
-
- Note that there are also less direct ways in which private
- information can be divulged. If a user or service chooses to be
- reachable at an address that is guessable from the person's name and
- organizational affiliation (which describes most addresses-of-
- record), the traditional method of ensuring privacy by having an
- unlisted "phone number" is compromised. A user location service can
- infringe on the privacy of the recipient of a session invitation by
- divulging their specific whereabouts to the caller; an implementation
- consequently SHOULD be able to restrict, on a per-user basis, what
- kind of location and availability information is given out to certain
- classes of callers. This is a whole class of problem that is
- expected to be studied further in ongoing SIP work.
-
- In some cases, users may want to conceal personal information in
- header fields that convey identity. This can apply not only to the
- From and related headers representing the originator of the request,
- but also the To - it may not be appropriate to convey to the final
- destination a speed-dialing nickname, or an unexpanded identifier for
- a group of targets, either of which would be removed from the
- Request-URI as the request is routed, but not changed in the To
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 251]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- header field if the two were initially identical. Thus it MAY be
- desirable for privacy reasons to create a To header field that
- differs from the Request-URI.
-
-27 IANA Considerations
-
- All method names, header field names, status codes, and option tags
- used in SIP applications are registered with IANA through
- instructions in an IANA Considerations section in an RFC.
-
- The specification instructs the IANA to create four new sub-
- registries under http://www.iana.org/assignments/sip-parameters:
- Option Tags, Warning Codes (warn-codes), Methods and Response Codes,
- added to the sub-registry of Header Fields that is already present
- there.
-
-27.1 Option Tags
-
- This specification establishes the Option Tags sub-registry under
- http://www.iana.org/assignments/sip-parameters.
-
- Option tags are used in header fields such as Require, Supported,
- Proxy-Require, and Unsupported in support of SIP compatibility
- mechanisms for extensions (Section 19.2). The option tag itself is a
- string that is associated with a particular SIP option (that is, an
- extension). It identifies the option to SIP endpoints.
-
- Option tags are registered by the IANA when they are published in
- standards track RFCs. The IANA Considerations section of the RFC
- must include the following information, which appears in the IANA
- registry along with the RFC number of the publication.
-
- o Name of the option tag. The name MAY be of any length, but
- SHOULD be no more than twenty characters long. The name MUST
- consist of alphanum (Section 25) characters only.
-
- o Descriptive text that describes the extension.
-
-27.2 Warn-Codes
-
- This specification establishes the Warn-codes sub-registry under
- http://www.iana.org/assignments/sip-parameters and initiates its
- population with the warn-codes listed in Section 20.43. Additional
- warn-codes are registered by RFC publication.
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 252]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- The descriptive text for the table of warn-codes is:
-
- Warning codes provide information supplemental to the status code in
- SIP response messages when the failure of the transaction results
- from a Session Description Protocol (SDP) (RFC 2327 [1]) problem.
-
- The "warn-code" consists of three digits. A first digit of "3"
- indicates warnings specific to SIP. Until a future specification
- describes uses of warn-codes other than 3xx, only 3xx warn-codes may
- be registered.
-
- Warnings 300 through 329 are reserved for indicating problems with
- keywords in the session description, 330 through 339 are warnings
- related to basic network services requested in the session
- description, 370 through 379 are warnings related to quantitative QoS
- parameters requested in the session description, and 390 through 399
- are miscellaneous warnings that do not fall into one of the above
- categories.
-
-27.3 Header Field Names
-
- This obsoletes the IANA instructions about the header sub-registry
- under http://www.iana.org/assignments/sip-parameters.
-
- The following information needs to be provided in an RFC publication
- in order to register a new header field name:
-
- o The RFC number in which the header is registered;
-
- o the name of the header field being registered;
-
- o a compact form version for that header field, if one is
- defined;
-
- Some common and widely used header fields MAY be assigned one-letter
- compact forms (Section 7.3.3). Compact forms can only be assigned
- after SIP working group review, followed by RFC publication.
-
-27.4 Method and Response Codes
-
- This specification establishes the Method and Response-Code sub-
- registries under http://www.iana.org/assignments/sip-parameters and
- initiates their population as follows. The initial Methods table is:
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 253]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- INVITE [RFC3261]
- ACK [RFC3261]
- BYE [RFC3261]
- CANCEL [RFC3261]
- REGISTER [RFC3261]
- OPTIONS [RFC3261]
- INFO [RFC2976]
-
- The response code table is initially populated from Section 21, the
- portions labeled Informational, Success, Redirection, Client-Error,
- Server-Error, and Global-Failure. The table has the following
- format:
-
- Type (e.g., Informational)
- Number Default Reason Phrase [RFC3261]
-
- The following information needs to be provided in an RFC publication
- in order to register a new response code or method:
-
- o The RFC number in which the method or response code is
- registered;
-
- o the number of the response code or name of the method being
- registered;
-
- o the default reason phrase for that response code, if
- applicable;
-
-27.5 The "message/sip" MIME type.
-
- This document registers the "message/sip" MIME media type in order to
- allow SIP messages to be tunneled as bodies within SIP, primarily for
- end-to-end security purposes. This media type is defined by the
- following information:
-
- Media type name: message
- Media subtype name: sip
- Required parameters: none
-
- Optional parameters: version
- version: The SIP-Version number of the enclosed message (e.g.,
- "2.0"). If not present, the version defaults to "2.0".
- Encoding scheme: SIP messages consist of an 8-bit header
- optionally followed by a binary MIME data object. As such, SIP
- messages must be treated as binary. Under normal circumstances
- SIP messages are transported over binary-capable transports, no
- special encodings are needed.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 254]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Security considerations: see below
- Motivation and examples of this usage as a security mechanism
- in concert with S/MIME are given in 23.4.
-
-27.6 New Content-Disposition Parameter Registrations
-
- This document also registers four new Content-Disposition header
- "disposition-types": alert, icon, session and render. The authors
- request that these values be recorded in the IANA registry for
- Content-Dispositions.
-
- Descriptions of these "disposition-types", including motivation and
- examples, are given in Section 20.11.
-
- Short descriptions suitable for the IANA registry are:
-
- alert the body is a custom ring tone to alert the user
- icon the body is displayed as an icon to the user
- render the body should be displayed to the user
- session the body describes a communications session, for
- example, as RFC 2327 SDP body
-
-28 Changes From RFC 2543
-
- This RFC revises RFC 2543. It is mostly backwards compatible with
- RFC 2543. The changes described here fix many errors discovered in
- RFC 2543 and provide information on scenarios not detailed in RFC
- 2543. The protocol has been presented in a more cleanly layered
- model here.
-
- We break the differences into functional behavior that is a
- substantial change from RFC 2543, which has impact on
- interoperability or correct operation in some cases, and functional
- behavior that is different from RFC 2543 but not a potential source
- of interoperability problems. There have been countless
- clarifications as well, which are not documented here.
-
-28.1 Major Functional Changes
-
- o When a UAC wishes to terminate a call before it has been answered,
- it sends CANCEL. If the original INVITE still returns a 2xx, the
- UAC then sends BYE. BYE can only be sent on an existing call leg
- (now called a dialog in this RFC), whereas it could be sent at any
- time in RFC 2543.
-
- o The SIP BNF was converted to be RFC 2234 compliant.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 255]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o SIP URL BNF was made more general, allowing a greater set of
- characters in the user part. Furthermore, comparison rules were
- simplified to be primarily case-insensitive, and detailed handling
- of comparison in the presence of parameters was described. The
- most substantial change is that a URI with a parameter with the
- default value does not match a URI without that parameter.
-
- o Removed Via hiding. It had serious trust issues, since it relied
- on the next hop to perform the obfuscation process. Instead, Via
- hiding can be done as a local implementation choice in stateful
- proxies, and thus is no longer documented.
-
- o In RFC 2543, CANCEL and INVITE transactions were intermingled.
- They are separated now. When a user sends an INVITE and then a
- CANCEL, the INVITE transaction still terminates normally. A UAS
- needs to respond to the original INVITE request with a 487
- response.
-
- o Similarly, CANCEL and BYE transactions were intermingled; RFC 2543
- allowed the UAS not to send a response to INVITE when a BYE was
- received. That is disallowed here. The original INVITE needs a
- response.
-
- o In RFC 2543, UAs needed to support only UDP. In this RFC, UAs
- need to support both UDP and TCP.
-
- o In RFC 2543, a forking proxy only passed up one challenge from
- downstream elements in the event of multiple challenges. In this
- RFC, proxies are supposed to collect all challenges and place them
- into the forwarded response.
-
- o In Digest credentials, the URI needs to be quoted; this is unclear
- from RFC 2617 and RFC 2069 which are both inconsistent on it.
-
- o SDP processing has been split off into a separate specification
- [13], and more fully specified as a formal offer/answer exchange
- process that is effectively tunneled through SIP. SDP is allowed
- in INVITE/200 or 200/ACK for baseline SIP implementations; RFC
- 2543 alluded to the ability to use it in INVITE, 200, and ACK in a
- single transaction, but this was not well specified. More complex
- SDP usages are allowed in extensions.
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 256]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o Added full support for IPv6 in URIs and in the Via header field.
- Support for IPv6 in Via has required that its header field
- parameters allow the square bracket and colon characters. These
- characters were previously not permitted. In theory, this could
- cause interop problems with older implementations. However, we
- have observed that most implementations accept any non-control
- ASCII character in these parameters.
-
- o DNS SRV procedure is now documented in a separate specification
- [4]. This procedure uses both SRV and NAPTR resource records and
- no longer combines data from across SRV records as described in
- RFC 2543.
-
- o Loop detection has been made optional, supplanted by a mandatory
- usage of Max-Forwards. The loop detection procedure in RFC 2543
- had a serious bug which would report "spirals" as an error
- condition when it was not. The optional loop detection procedure
- is more fully and correctly specified here.
-
- o Usage of tags is now mandatory (they were optional in RFC 2543),
- as they are now the fundamental building blocks of dialog
- identification.
-
- o Added the Supported header field, allowing for clients to indicate
- what extensions are supported to a server, which can apply those
- extensions to the response, and indicate their usage with a
- Require in the response.
-
- o Extension parameters were missing from the BNF for several header
- fields, and they have been added.
-
- o Handling of Route and Record-Route construction was very
- underspecified in RFC 2543, and also not the right approach. It
- has been substantially reworked in this specification (and made
- vastly simpler), and this is arguably the largest change.
- Backwards compatibility is still provided for deployments that do
- not use "pre-loaded routes", where the initial request has a set
- of Route header field values obtained in some way outside of
- Record-Route. In those situations, the new mechanism is not
- interoperable.
-
- o In RFC 2543, lines in a message could be terminated with CR, LF,
- or CRLF. This specification only allows CRLF.
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 257]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o Usage of Route in CANCEL and ACK was not well defined in RFC 2543.
- It is now well specified; if a request had a Route header field,
- its CANCEL or ACK for a non-2xx response to the request need to
- carry the same Route header field values. ACKs for 2xx responses
- use the Route values learned from the Record-Route of the 2xx
- responses.
-
- o RFC 2543 allowed multiple requests in a single UDP packet. This
- usage has been removed.
-
- o Usage of absolute time in the Expires header field and parameter
- has been removed. It caused interoperability problems in elements
- that were not time synchronized, a common occurrence. Relative
- times are used instead.
-
- o The branch parameter of the Via header field value is now
- mandatory for all elements to use. It now plays the role of a
- unique transaction identifier. This avoids the complex and bug-
- laden transaction identification rules from RFC 2543. A magic
- cookie is used in the parameter value to determine if the previous
- hop has made the parameter globally unique, and comparison falls
- back to the old rules when it is not present. Thus,
- interoperability is assured.
-
- o In RFC 2543, closure of a TCP connection was made equivalent to a
- CANCEL. This was nearly impossible to implement (and wrong) for
- TCP connections between proxies. This has been eliminated, so
- that there is no coupling between TCP connection state and SIP
- processing.
-
- o RFC 2543 was silent on whether a UA could initiate a new
- transaction to a peer while another was in progress. That is now
- specified here. It is allowed for non-INVITE requests, disallowed
- for INVITE.
-
- o PGP was removed. It was not sufficiently specified, and not
- compatible with the more complete PGP MIME. It was replaced with
- S/MIME.
-
- o Added the "sips" URI scheme for end-to-end TLS. This scheme is
- not backwards compatible with RFC 2543. Existing elements that
- receive a request with a SIPS URI scheme in the Request-URI will
- likely reject the request. This is actually a feature; it ensures
- that a call to a SIPS URI is only delivered if all path hops can
- be secured.
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 258]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o Additional security features were added with TLS, and these are
- described in a much larger and complete security considerations
- section.
-
- o In RFC 2543, a proxy was not required to forward provisional
- responses from 101 to 199 upstream. This was changed to MUST.
- This is important, since many subsequent features depend on
- delivery of all provisional responses from 101 to 199.
-
- o Little was said about the 503 response code in RFC 2543. It has
- since found substantial use in indicating failure or overload
- conditions in proxies. This requires somewhat special treatment.
- Specifically, receipt of a 503 should trigger an attempt to
- contact the next element in the result of a DNS SRV lookup. Also,
- 503 response is only forwarded upstream by a proxy under certain
- conditions.
-
- o RFC 2543 defined, but did no sufficiently specify, a mechanism for
- UA authentication of a server. That has been removed. Instead,
- the mutual authentication procedures of RFC 2617 are allowed.
-
- o A UA cannot send a BYE for a call until it has received an ACK for
- the initial INVITE. This was allowed in RFC 2543 but leads to a
- potential race condition.
-
- o A UA or proxy cannot send CANCEL for a transaction until it gets a
- provisional response for the request. This was allowed in RFC
- 2543 but leads to potential race conditions.
-
- o The action parameter in registrations has been deprecated. It was
- insufficient for any useful services, and caused conflicts when
- application processing was applied in proxies.
-
- o RFC 2543 had a number of special cases for multicast. For
- example, certain responses were suppressed, timers were adjusted,
- and so on. Multicast now plays a more limited role, and the
- protocol operation is unaffected by usage of multicast as opposed
- to unicast. The limitations as a result of that are documented.
-
- o Basic authentication has been removed entirely and its usage
- forbidden.
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 259]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- o Proxies no longer forward a 6xx immediately on receiving it.
- Instead, they CANCEL pending branches immediately. This avoids a
- potential race condition that would result in a UAC getting a 6xx
- followed by a 2xx. In all cases except this race condition, the
- result will be the same - the 6xx is forwarded upstream.
-
- o RFC 2543 did not address the problem of request merging. This
- occurs when a request forks at a proxy and later rejoins at an
- element. Handling of merging is done only at a UA, and procedures
- are defined for rejecting all but the first request.
-
-28.2 Minor Functional Changes
-
- o Added the Alert-Info, Error-Info, and Call-Info header fields for
- optional content presentation to users.
-
- o Added the Content-Language, Content-Disposition and MIME-Version
- header fields.
-
- o Added a "glare handling" mechanism to deal with the case where
- both parties send each other a re-INVITE simultaneously. It uses
- the new 491 (Request Pending) error code.
-
- o Added the In-Reply-To and Reply-To header fields for supporting
- the return of missed calls or messages at a later time.
-
- o Added TLS and SCTP as valid SIP transports.
-
- o There were a variety of mechanisms described for handling failures
- at any time during a call; those are now generally unified. BYE
- is sent to terminate.
-
- o RFC 2543 mandated retransmission of INVITE responses over TCP, but
- noted it was really only needed for 2xx. That was an artifact of
- insufficient protocol layering. With a more coherent transaction
- layer defined here, that is no longer needed. Only 2xx responses
- to INVITEs are retransmitted over TCP.
-
- o Client and server transaction machines are now driven based on
- timeouts rather than retransmit counts. This allows the state
- machines to be properly specified for TCP and UDP.
-
- o The Date header field is used in REGISTER responses to provide a
- simple means for auto-configuration of dates in user agents.
-
- o Allowed a registrar to reject registrations with expirations that
- are too short in duration. Defined the 423 response code and the
- Min-Expires for this purpose.
-
-
-
-Rosenberg, et. al. Standards Track [Page 260]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-29 Normative References
-
- [1] Handley, M. and V. Jacobson, "SDP: Session Description
- Protocol", RFC 2327, April 1998.
-
- [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement
- Levels", BCP 14, RFC 2119, March 1997.
-
- [3] Resnick, P., "Internet Message Format", RFC 2822, April 2001.
-
- [4] Rosenberg, J. and H. Schulzrinne, "SIP: Locating SIP Servers",
- RFC 3263, June 2002.
-
- [5] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform Resource
- Identifiers (URI): Generic Syntax", RFC 2396, August 1998.
-
- [6] Chown, P., "Advanced Encryption Standard (AES) Ciphersuites for
- Transport Layer Security (TLS)", RFC 3268, June 2002.
-
- [7] Yergeau, F., "UTF-8, a transformation format of ISO 10646", RFC
- 2279, January 1998.
-
- [8] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L.,
- Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol --
- HTTP/1.1", RFC 2616, June 1999.
-
- [9] Vaha-Sipila, A., "URLs for Telephone Calls", RFC 2806, April
- 2000.
-
- [10] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", RFC 2234, November 1997.
-
- [11] Freed, F. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part Two: Media Types", RFC 2046, November
- 1996.
-
- [12] Eastlake, D., Crocker, S. and J. Schiller, "Randomness
- Recommendations for Security", RFC 1750, December 1994.
-
- [13] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with
- SDP", RFC 3264, June 2002.
-
- [14] Postel, J., "User Datagram Protocol", STD 6, RFC 768, August
- 1980.
-
- [15] Postel, J., "DoD Standard Transmission Control Protocol", RFC
- 761, January 1980.
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 261]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- [16] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer,
- H., Taylor, T., Rytina, I., Kalla, M., Zhang, L. and V. Paxson,
- "Stream Control Transmission Protocol", RFC 2960, October 2000.
-
- [17] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
- Leach, P., Luotonen, A. and L. Stewart, "HTTP authentication:
- Basic and Digest Access Authentication", RFC 2617, June 1999.
-
- [18] Troost, R., Dorner, S. and K. Moore, "Communicating Presentation
- Information in Internet Messages: The Content-Disposition Header
- Field", RFC 2183, August 1997.
-
- [19] Zimmerer, E., Peterson, J., Vemuri, A., Ong, L., Audet, F.,
- Watson, M. and M. Zonoun, "MIME media types for ISUP and QSIG
- Objects", RFC 3204, December 2001.
-
- [20] Braden, R., "Requirements for Internet Hosts - Application and
- Support", STD 3, RFC 1123, October 1989.
-
- [21] Alvestrand, H., "IETF Policy on Character Sets and Languages",
- BCP 18, RFC 2277, January 1998.
-
- [22] Galvin, J., Murphy, S., Crocker, S. and N. Freed, "Security
- Multiparts for MIME: Multipart/Signed and Multipart/Encrypted",
- RFC 1847, October 1995.
-
- [23] Housley, R., "Cryptographic Message Syntax", RFC 2630, June
- 1999.
-
- [24] Ramsdell B., "S/MIME Version 3 Message Specification", RFC 2633,
- June 1999.
-
- [25] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC
- 2246, January 1999.
-
- [26] Kent, S. and R. Atkinson, "Security Architecture for the
- Internet Protocol", RFC 2401, November 1998.
-
-30 Informative References
-
- [27] R. Pandya, "Emerging mobile and personal communication systems,"
- IEEE Communications Magazine, Vol. 33, pp. 44--52, June 1995.
-
- [28] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson,
- "RTP: A Transport Protocol for Real-Time Applications", RFC
- 1889, January 1996.
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 262]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- [29] Schulzrinne, H., Rao, R. and R. Lanphier, "Real Time Streaming
- Protocol (RTSP)", RFC 2326, April 1998.
-
- [30] Cuervo, F., Greene, N., Rayhan, A., Huitema, C., Rosen, B. and
- J. Segers, "Megaco Protocol Version 1.0", RFC 3015, November
- 2000.
-
- [31] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg,
- "SIP: Session Initiation Protocol", RFC 2543, March 1999.
-
- [32] Hoffman, P., Masinter, L. and J. Zawinski, "The mailto URL
- scheme", RFC 2368, July 1998.
-
- [33] E. M. Schooler, "A multicast user directory service for
- synchronous rendezvous," Master's Thesis CS-TR-96-18, Department
- of Computer Science, California Institute of Technology,
- Pasadena, California, Aug. 1996.
-
- [34] Donovan, S., "The SIP INFO Method", RFC 2976, October 2000.
-
- [35] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April
- 1992.
-
- [36] Dawson, F. and T. Howes, "vCard MIME Directory Profile", RFC
- 2426, September 1998.
-
- [37] Good, G., "The LDAP Data Interchange Format (LDIF) - Technical
- Specification", RFC 2849, June 2000.
-
- [38] Palme, J., "Common Internet Message Headers", RFC 2076,
- February 1997.
-
- [39] Franks, J., Hallam-Baker, P., Hostetler, J., Leach, P.,
- Luotonen, A., Sink, E. and L. Stewart, "An Extension to HTTP:
- Digest Access Authentication", RFC 2069, January 1997.
-
- [40] Johnston, A., Donovan, S., Sparks, R., Cunningham, C., Willis,
- D., Rosenberg, J., Summers, K. and H. Schulzrinne, "SIP Call
- Flow Examples", Work in Progress.
-
- [41] E. M. Schooler, "Case study: multimedia conference control in a
- packet-switched teleconferencing system," Journal of
- Internetworking: Research and Experience, Vol. 4, pp. 99--120,
- June 1993. ISI reprint series ISI/RS-93-359.
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 263]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- [42] H. Schulzrinne, "Personal mobility for multimedia services in
- the Internet," in European Workshop on Interactive Distributed
- Multimedia Systems and Services (IDMS), (Berlin, Germany), Mar.
- 1996.
-
- [43] Floyd, S., "Congestion Control Principles", RFC 2914, September
- 2000.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 264]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-A Table of Timer Values
-
- Table 4 summarizes the meaning and defaults of the various timers
- used by this specification.
-
-Timer Value Section Meaning
-----------------------------------------------------------------------
-T1 500ms default Section 17.1.1.1 RTT Estimate
-T2 4s Section 17.1.2.2 The maximum retransmit
- interval for non-INVITE
- requests and INVITE
- responses
-T4 5s Section 17.1.2.2 Maximum duration a
- message will
- remain in the network
-Timer A initially T1 Section 17.1.1.2 INVITE request retransmit
- interval, for UDP only
-Timer B 64*T1 Section 17.1.1.2 INVITE transaction
- timeout timer
-Timer C > 3min Section 16.6 proxy INVITE transaction
- bullet 11 timeout
-Timer D > 32s for UDP Section 17.1.1.2 Wait time for response
- 0s for TCP/SCTP retransmits
-Timer E initially T1 Section 17.1.2.2 non-INVITE request
- retransmit interval,
- UDP only
-Timer F 64*T1 Section 17.1.2.2 non-INVITE transaction
- timeout timer
-Timer G initially T1 Section 17.2.1 INVITE response
- retransmit interval
-Timer H 64*T1 Section 17.2.1 Wait time for
- ACK receipt
-Timer I T4 for UDP Section 17.2.1 Wait time for
- 0s for TCP/SCTP ACK retransmits
-Timer J 64*T1 for UDP Section 17.2.2 Wait time for
- 0s for TCP/SCTP non-INVITE request
- retransmits
-Timer K T4 for UDP Section 17.1.2.2 Wait time for
- 0s for TCP/SCTP response retransmits
-
- Table 4: Summary of timers
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 265]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Acknowledgments
-
- We wish to thank the members of the IETF MMUSIC and SIP WGs for their
- comments and suggestions. Detailed comments were provided by Ofir
- Arkin, Brian Bidulock, Jim Buller, Neil Deason, Dave Devanathan,
- Keith Drage, Bill Fenner, Cedric Fluckiger, Yaron Goland, John
- Hearty, Bernie Hoeneisen, Jo Hornsby, Phil Hoffer, Christian Huitema,
- Hisham Khartabil, Jean Jervis, Gadi Karmi, Peter Kjellerstedt, Anders
- Kristensen, Jonathan Lennox, Gethin Liddell, Allison Mankin, William
- Marshall, Rohan Mahy, Keith Moore, Vern Paxson, Bob Penfield, Moshe
- J. Sambol, Chip Sharp, Igor Slepchin, Eric Tremblay, and Rick
- Workman.
-
- Brian Rosen provided the compiled BNF.
-
- Jean Mahoney provided technical writing assistance.
-
- This work is based, inter alia, on [41,42].
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 266]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Authors' Addresses
-
- Authors addresses are listed alphabetically for the editors, the
- writers, and then the original authors of RFC 2543. All listed
- authors actively contributed large amounts of text to this document.
-
- Jonathan Rosenberg
- dynamicsoft
- 72 Eagle Rock Ave
- East Hanover, NJ 07936
- USA
-
- EMail: jdrosen@dynamicsoft.com
-
-
- Henning Schulzrinne
- Dept. of Computer Science
- Columbia University
- 1214 Amsterdam Avenue
- New York, NY 10027
- USA
-
- EMail: schulzrinne@cs.columbia.edu
-
-
- Gonzalo Camarillo
- Ericsson
- Advanced Signalling Research Lab.
- FIN-02420 Jorvas
- Finland
-
- EMail: Gonzalo.Camarillo@ericsson.com
-
-
- Alan Johnston
- WorldCom
- 100 South 4th Street
- St. Louis, MO 63102
- USA
-
- EMail: alan.johnston@wcom.com
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 267]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
- Jon Peterson
- NeuStar, Inc
- 1800 Sutter Street, Suite 570
- Concord, CA 94520
- USA
-
- EMail: jon.peterson@neustar.com
-
-
- Robert Sparks
- dynamicsoft, Inc.
- 5100 Tennyson Parkway
- Suite 1200
- Plano, Texas 75024
- USA
-
- EMail: rsparks@dynamicsoft.com
-
-
- Mark Handley
- International Computer Science Institute
- 1947 Center St, Suite 600
- Berkeley, CA 94704
- USA
-
- EMail: mjh@icir.org
-
-
- Eve Schooler
- AT&T Labs-Research
- 75 Willow Road
- Menlo Park, CA 94025
- USA
-
- EMail: schooler@research.att.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 268]
-
-RFC 3261 SIP: Session Initiation Protocol June 2002
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2002). All Rights Reserved.
-
- This document and translations of it may be copied and furnished to
- others, and derivative works that comment on or otherwise explain it
- or assist in its implementation may be prepared, copied, published
- and distributed, in whole or in part, without restriction of any
- kind, provided that the above copyright notice and this paragraph are
- included on all such copies and derivative works. However, this
- document itself may not be modified in any way, such as by removing
- the copyright notice or references to the Internet Society or other
- Internet organizations, except as needed for the purpose of
- developing Internet standards in which case the procedures for
- copyrights defined in the Internet Standards process must be
- followed, or as required to translate it into languages other than
- English.
-
- The limited permissions granted above are perpetual and will not be
- revoked by the Internet Society or its successors or assigns.
-
- This document and the information contained herein is provided on an
- "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
- TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Acknowledgement
-
- Funding for the RFC Editor function is currently provided by the
- Internet Society.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Rosenberg, et. al. Standards Track [Page 269]
-
diff --git a/tests/auto/corelib/io/qtextstream/shift-jis.txt b/tests/auto/corelib/io/qtextstream/shift-jis.txt
deleted file mode 100644
index 51f161ab1a..0000000000
--- a/tests/auto/corelib/io/qtextstream/shift-jis.txt
+++ /dev/null
@@ -1,764 +0,0 @@
-Shift-JISƒeƒLƒXƒg‚𳂵‚­ˆµ‚¤
-Å‹ß‚ÌXV—š—ð
-2005-03-26: uʼn‚Év’†AXML“ú–{Œêƒvƒƒtƒ@ƒCƒ‹‘æ2”Å‚ÉŠî‚«AŽáŠ±’Ç‹LB
-2005-03-09: uʼn‚Év’†A•¶Í‚ðŽáŠ±C³B
-2003-06-24: Shift-JIS‚ÌŠ¿Žš‚ðŠÜ‚Þƒtƒ@ƒCƒ‹–¼/ƒpƒX–¼
-2003-05-31: uʼn‚Év’†AuƒVƒtƒgJISv‚È‚Ç‚Ì•\‹L‚ɂ‚¢‚ÄB
-2003-05-24: CP932d•¡’è‹`•¶Žš‚Ì•ÏŠ·
-2002-08-30: Perl 5.8.0 ‚ɂ‚¢‚ÄB
-2002-01-17: ’·‚¢•¶Žš—ñ‚ɑ΂·‚鳋K•\Œ»ŒŸõ
-2001-12-15: ShiftJIS::Collate ‚ª overrideCJK ƒpƒ‰ƒ[ƒ^‚ð”pŽ~‚µ‚½‚±‚Æ‚É”º‚¤ “ú–{Œê•¶Žš—ñ‚ð•À‚Ñ‘Ö‚¦‚é‚Ì‘‚«Š·‚¦B
-ʼn‚É
-‚ ‚肪‚¿‚ȃGƒ‰[
-ƒGƒ‰[‚âŠÔˆá‚¢‚ð–h‚®‘Îô
-•¶Žš—ñƒŠƒeƒ‰ƒ‹‚Ìì‚è•û
-³‹K•\Œ»‚ƃ}ƒbƒ`
-ƒOƒ[ƒoƒ‹ƒ}ƒbƒ`
-ƒAƒ‹ƒtƒ@ƒxƒbƒg‚̑啶Žš‚Ƭ•¶Žš
-’·‚¢•¶Žš—ñ‚ɑ΂·‚鳋K•\Œ»ŒŸõ
-ŠOŽš‚Ì•ÏŠ·
-CP932d•¡’è‹`•¶Žš‚Ì•ÏŠ·
-•¶Žš”‚𔂦‚é
-•¶Žš’PˆÊ‚É•ªŠ„‚·‚é
-‚¢‚ë‚¢‚ë‚È•ªŠ„
-“Á’è‚Ì’·‚³‚ÅØ‚è‚»‚낦‚é
-“ú–{Œê•¶Žš—ñ‚ð•À‚Ñ‘Ö‚¦‚é
-Shift-JIS‚ÌŠ¿Žš‚ðŠÜ‚Þƒtƒ@ƒCƒ‹–¼/ƒpƒX–¼
-ʼn‚É
-“ú–{Œê‚Ì•¶ŽšƒR[ƒh‚É‚Í‚¢‚­‚‚©‚Ì‚à‚Ì‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·B‚ ‚é’ö“xˆê”Ê“I‚È‚à‚Ì‚È‚çA‚Ç‚ê‚ðŽg‚Á‚Ä‚à‚æ‚¢‚Å‚µ‚傤i‚Ç‚Ì•¶ŽšƒR[ƒh‚Å•„†‰»‚³‚ê‚Ä‚¢‚é‚©‚Ìî•ñ‚ªŽ¸‚í‚ꂳ‚¦‚µ‚È‚¯‚ê‚ÎjB
-—Ⴆ‚ÎA“ú–{Œê”ÅWindows‚Å‚ÍAƒƒ‚’ ‚Å‚àDOS‘‹‚Å‚àShift-JIS‚ªŽg‚í‚ê‚Ä‚¢‚Ü‚·B‚±‚¤‚¢‚¤ê‡Aˆ—‚Ì“r’†‚Å‚í‚´‚í‚´EUC-JP‚âUTF-8‚É•ÏŠ·‚·‚é‚Æ‚µ‚½‚ç–Ê“|‚Å‚·BƒfƒoƒbƒO‚Ì‚Æ‚«Au‚±‚Ì’iŠK‚Å‚Í‚±‚Ì•Ï”‚ɂ͉½‚ª“ü‚Á‚Ä‚¢‚é‚Ì‚©vo—Í‚µ‚Ä“_ŒŸ‚·‚é‚Ì‚Í‚æ‚­s‚í‚ê‚Ü‚·‚ªA‚±‚Ì‚Æ‚«EUC-JP‚Æ‚µ‚ÄŽû‚ß‚ç‚ê‚Ä‚¢‚½‚çAì‹Æ‚ÍŽèŠÔ‚Ç‚é‚Å‚µ‚傤B“ü—Í‚ào—Í‚àShift-JIS‚Ås‚¤‚‚à‚è‚È‚çAˆ—‚Ì‘S‘Ì‚ÅShift-JIS‚̂܂܈µ‚¦‚½‚ç‚«‚Á‚Æ•Ö—˜‚Å‚µ‚傤B
-’F "ƒVƒtƒgJIS", "Shift_JIS", "Shift-JIS" ‚È‚Ç‚Ì•\‹L‚̈Ⴂ‚ɂ‚¢‚Ä‚Í‚æ‚­‚í‚©‚Á‚Ä‚¢‚Ü‚¹‚ñB¡‚Ì‚Æ‚±‚땪‚©‚Á‚Ä‚¢‚邱‚Æ‚ÍF
-JIS X 0208:1997‚Ì•‘®‘1iƒVƒtƒg•„†‰»•\Œ»j‚É‚ÍAuŽQlv‚Æ‚µ‚Äu‚±‚Ì•„†‰»•\Œ»‚Í’ÊígƒVƒtƒgJISƒR[ƒhh‚ƌĂ΂ê‚Ä‚¢‚év‚Ì‹Lq‚ª‚ ‚è‚Ü‚·B
-IANA ‚Ì CHARACTER SETS ‚É‚ÍAShift_JIS ‚Æ Windows-31J ‚Æ‚ª•Ê‚É“o˜^‚³‚ê‚Ä‚¢‚Ü‚·B‚Ü‚½AShift_JIS‚ɂ‚¢‚ÄAuCCSi•„†‰»•¶ŽšW‡j‚ÍJIS X0201:1997‚ÆJIS X0208:1997‚Å‚ ‚èAŠ®‘S‚È’è‹`‚ÍJIS X 0208:1997‚Ì•‘®‘1‚ÉŽ¦‚³‚ê‚Ä‚¢‚éBv‚Æ‹L‚µ‚Ä‚¢‚Ü‚·B
-W3C ‚Ì XML Japanese Profile ‚É‚ÍAShift-JIS‚ÉUnicode‚Ö‚Ì•ÏŠ·•\‚ª•¡”‚ ‚éŽ|‚Ì‹LÚ‚ª‚ ‚è‚Ü‚·BXML Japanese Profile (Second Edition)‚Å‚ÍAUnicode Consortium‚ÅŒöŠJ‚³‚ê‚Ä‚¢‚éMicrosoft CP932‚Ì•ÏŠ·•\‚É‚æ‚écharset‚Ì–¼Ì "x-sjis-cp932" ‚ð "Windows-31J" ‚É•ÏX‚µ‚Ä‚¢‚Ü‚·B
-MicrosoftŽÐ‚Ì Global Dev ‚Å‚ÍACodepage 932 ‚ð "Japanese Shift-JIS" ‚Æ’‹L‚µ‚Ä‚¢‚Ü‚·B
-‚µ‚©‚µAShift-JIS‚É‚Í‚ ‚éŽí‚Ì•È‚ª‚ ‚Á‚ÄA‚¿‚å‚Á‚Æ‚µ‚½‚±‚Æ‚ªƒoƒO‚âƒGƒ‰[‚╶Žš‰»‚¯‚ÌŒ´ˆö‚Æ‚È‚è‚Ü‚·B‚È‚ñ‚Æ‚©‚È‚ç‚È‚¢‚à‚Ì‚Å‚µ‚傤‚©B
-Perl‚ͧŒä•¶Žš‚âƒiƒ‹•¶Žš‚ðŠÜ‚ÞƒoƒCƒiƒŠƒf[ƒ^‚Å‚·‚糂µ‚­ˆ—‚Å‚«‚é‚悤‚ÉÝŒv‚³‚ê‚Ä‚¢‚é‚Ì‚ÅAƒXƒNƒŠƒvƒg‚âƒeƒLƒXƒg‚ðShift-JIS‚Å‘‚¢‚½‚­‚ç‚¢‚Å–â‘è‚ɂȂ邱‚Æ‚Í‚ ‚è‚Ü‚¹‚ñB
-‚µ‚©‚µAperl‚ªƒXƒNƒŠƒvƒg‚ð‰ðŽß‚·‚é‚Æ‚«‚Íi’ÊíjƒoƒCƒg’PˆÊ‚Å’²‚ׂé‚Ì‚ÅAShift-JIS‚̂悤‚ȃ}ƒ‹ƒ`ƒoƒCƒg•¶Žš‚ðŠÜ‚Þ•„†‚Í‚»‚Ì‚Ü‚Ü‚Å‚Í’¼Ú—‰ð‚Å‚«‚Ü‚¹‚ñB
-‚½‚Æ‚¦‚ÎAShift-JIS‚Å '‚ ' ‚Æ‚¢‚¤•¶Žš‚ÍA16i”‚Å82 A0‚Æ‚¢‚¤‚QƒoƒCƒg‚Å•\‚³‚ê‚Ü‚·B‚±‚ê‚ð "\x82\xA0" ‚Æ‘‚¢‚Ä‚àperl‚É‚Æ‚Á‚Ä‚Í“¯‚¶‚Å‚·B‚±‚ꂪ“ú–{‚Ìicountryj“ú–{Œê‚Ìilanguagej•¶Žš‚Å‚ ‚é‚Æ‚©AShift-JIS‚Å‘‚©‚ê‚Ä‚¢‚éicharsetj‚Æ‚©‚¢‚¤î•ñ‚Í‚Ç‚±‚É‚àŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚¹‚ñB
-‚»‚Ì‚½‚ßAShift-JIS‚Å‘‚«‚½‚¢‚Æ‚«‚É‚ÍAperl‚ÌŒë‰ð‚ðŽó‚¯‚È‚¢‚悤‚É‘‚¢‚Ä‚â‚ç‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚»‚Ì”z—¶‚ÍAƒvƒƒOƒ‰ƒ}‚ª‚µ‚Ä‚â‚ç‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚Ì•¶‘‚Ì‹Lq‚ÍA‚»‚̂悤‚ÈŽèŠÔ‚ð‚©‚¯‚Ä‚àAShift-JIS‚ð—p‚¢‚邱‚ƂɈӋ`‚ª‚ ‚é‚Æl‚¦‚Ä‚¢‚él‚É‚ÍŽQl‚É‚È‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB
-‚»‚ñ‚ÈŽèŠÔ‚ðŠ|‚¯‚½‚­‚È‚¢l‚ÍA
-Perl 5.8.xˆÈ~‚ðŽg‚¤B
-—˜“_Fperl5-porters@perl.org ‚ŃTƒ|[ƒg‚³‚ê‚Ä‚¢‚éB
-Œ‡“_F“Æ“Á‚Ìl‚¦•û‚ª‚ ‚èA]—ˆ‚Ì“ú–{Œêˆ—‚Æ‚Í‘Š—e‚ê‚È‚¢‚Æ‚±‚낪‚ ‚éi‚à‚Á‚Æ‚àA‚»‚Ì‚¤‚¿Šµ‚ê‚Ä‹C‚É‚È‚ç‚È‚­‚È‚é‚©‚à‚µ‚ê‚È‚¢jB
-jperl‚ðŽg‚¤B
-—˜“_FShift-JIS ‚𕶎š‚Æ‚µ‚Ä’¼Úˆµ‚¤‚±‚Æ‚ª‚Å‚«‚éB
-Œ‡“_FŒ»ÝAˆÛŽ‚·‚él‚ª‚¢‚È‚¢B
-•¶ŽšƒR[ƒh‚ðUTF-8‚©EUC-JP‚É•ÏŠ·‚µ‚Ä‚©‚爗‚·‚éB
-—˜“_FPerl 5.8.xˆÈ~‚Å‚È‚­‚Ä‚à“®ì‚·‚é•ÏŠ·—p‚̃‚ƒWƒ…[ƒ‹(.pm)‚⃉ƒCƒuƒ‰ƒŠ(.pl)‚ª‚¢‚ë‚¢‚ë“üŽè‰Â”\B
-Œ‡“_FShift-JIS‚قLj«‚­‚È‚¢‚É‚µ‚Ä‚àAƒ}ƒ‹ƒ`ƒoƒCƒg•¶Žš‚ðƒVƒ“ƒOƒ‹ƒoƒCƒg•¶Žš‚Æ‹æ•Ê‚¹‚¸A‚Æ‚à‚ɈꕶŽš‚Æ‚µ‚Ĉ—‚·‚é‚Ì‚Í–Ê“|‚Å‚ ‚éB
- ‚Æ‚¢‚¤‘Έ‚ð‚Æ‚Á‚½‚Ù‚¤‚ª‚æ‚¢‚Å‚µ‚傤B‚±‚ê‚ç‚̃vƒƒOƒ‰ƒ€‚Í—L–¼‚È‚Ì‚ÅA’T‚¹‚΂·‚®Œ©‚‚©‚é‚Å‚µ‚傤‚©‚çA“üŽèæ‚Í‚±‚±‚É‚ÍŽ¦‚µ‚Ü‚¹‚ñB
-‚È‚¨A‚±‚Ì•¶‘‚É‘‚©‚ê‚Ä‚¢‚鎖‚ªAÅ‚àŠ©‚ß‚ç‚ê‚È‚¢•û–@‚È‚Ì‚ÅA‚±‚±‚©‚çæ‚ÍA‚»‚̂‚à‚è‚Å‚¨“ǂ݉º‚³‚¢B‚±‚Ì•û–@‚ɂ‚¢‚ĉ½‚©‹^–₪¶‚¶‚½‚Æ‚µ‚Ä‚àA‚»‚ê‚ɂ‚¢‚Ä‘¼‚Ì‚Æ‚±‚ë‚ÅŽ¿–â‚·‚é‚ÆA‰½‚Å‚»‚ñ‚È‚â‚è•û‚ð‚µ‚Ä‚¢‚é‚Ì‚©‚ÆA‚«‚Á‚Æ”ñ“‚ê‚é‚Å‚µ‚傤B‚©‚Æ‚¢‚Á‚ÄAŽ„‚É‚àu‚©‚È‚¢‚ʼnº‚³‚¢B
-Shift-JIS‚ðŽg‚Á‚½‚Æ‚«‚É‚ ‚肪‚¿‚ÈiHjƒGƒ‰[
-Shift-JIS‚É‚ÍA‘æ‚QƒoƒCƒg‚ª [@-~]iASCII 10i”‚Å64-126j‚͈̔͂ɓü‚é‚à‚Ì‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚ÌASCII•¶Žš‚ÍAperl‚É‚Æ‚Á‚Ä“Á•Ê‚ȈӖ¡‚ð‚à‚‚±‚Æ‚ª‚ ‚邽‚ßA‚µ‚΂µ‚΃Gƒ‰[‚ÌŒ´ˆö‚Æ‚È‚è‚Ü‚·BShift-JIS‚Å‚ÍA‚QƒoƒCƒg•¶Žš‚Ì‘æ‚QƒoƒCƒg‚ÍA[\x40-\x7E\x80-\xFC])‚͈̔͂ɂ ‚邽‚ßAŽÀ‚É188•ª‚Ì63A–ñ‚R•ª‚Ì‚P‚Ì•¶Žš‚ª‰½‚ç‚©‚Ì–â‘è‚ð‹N‚±‚µ“¾‚é‚Æ‚¢‚¦‚Ü‚·B
-ŽŸ‚ÉAShift-JIS‚ðŽg‚Á‚½‚Æ‚«‚É‹N‚±‚肪‚¿‚ȃGƒ‰[‚Æ‚»‚ÌŒ´ˆö‚ðŽ¦‚µ‚Ü‚·BƒGƒ‰[ƒƒbƒZ[ƒW‚Íperl‚̈Ⴂiƒo[ƒWƒ‡ƒ“‚â‚ǂ̃vƒ‰ƒbƒgƒtƒH[ƒ€—p‚Ì‚à‚Ì‚Å‚ ‚é‚©“™j‚É‚æ‚葽­‚̈Ⴂ‚ª‚ ‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñB
-ƒGƒ‰[‚É‚È‚ç‚È‚­‚Ä‚àA•¶Žš‰»‚¯‚µ‚½‚èAŠú‘Ò‚µ‚½‚悤‚È“®ì‚ð‚µ‚È‚©‚Á‚½‚è‚ÅA‚¤‚Ü‚­‚¢‚©‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·B‚±‚Ìê‡AƒGƒ‰[‚ªo‚È‚¢•ªAŒ´ˆö‚ðŽ©•ª‚Å’T‚³‚È‚¯‚ê‚΂Ȃç‚È‚­‚Ȃ邽‚߃oƒOŽæ‚è‚Í‚µ‚΂µ‚΢“ï‚Å‚·B
-‚±‚±‚ł̓Gƒ‰[‚ɑ΂·‚é‘Îô‚Í’ñŽ¦‚µ‚Ü‚¹‚ñB‘Îô‚Í‚ ‚Æ‚Å‚Ü‚Æ‚ß‚Ä‘‚«‚Ü‚·B
-‚È‚¨A‚±‚±‚É‚Í•¶ŽšƒR[ƒh‚ðEUC-JP‚É‚µ‚Ä‚à‹N‚±‚é‚悤‚È–â‘è‚âƒGƒ‰[‚ÍŽ¦‚µ‚Ü‚¹‚ñBŠî–{“I‚ÉAEUC-JP‚È‚ç‹N‚«‚È‚¢‚ªAShift-JIS‚Ì‚Æ‚«‚É‚Í‹N‚±‚é‚悤‚ÈŽ–•¿‚ÉŒÀ‚è‚Ü‚·B
-ƒGƒ‰[‚É‚Í‚È‚ç‚È‚¢‚¯‚Ç•¶Žš‰»‚¯‚·‚éi‚Pj
-—Ⴆ‚ÎA"•\Ž¦" ‚Æ‚© "–\—Í" ‚Æ‚©‚¢‚¤ƒŠƒeƒ‰ƒ‹‚ª•¶Žš‰»‚¯‚ð‹N‚±‚µ‚Ü‚·B‚±‚ê‚ç‚Í "•Ž¦" ‚Æ‚© "–—Í" ‚É‚È‚è‚Ü‚·B‚±‚ê‚ÍA"•\" ‚â "–\"‚Ì•¶Žš‚Ì‘æ‚QƒoƒCƒg‚ª \ ‚Å‚ ‚邽‚ßAƒ_ƒuƒ‹ƒNƒI[ƒg•¶Žš‚Ì’†‚Å‚ÍŽŸ‚Ì•¶Žš‚̃GƒXƒP[ƒv‚ð‚·‚é‚±‚Æ‚É‚È‚é‚Ì‚ÅA•\Ž¦ 0x955C8EA6 ‚Å‚ ‚Á‚Ä‚àAƒNƒI[ƒg‚ÌŒ‹‰Ê‚Í "•\Ž¦" 0x958EA6 ‚Æ‚È‚é‚©‚ç‚Å‚·B'•\Ž¦' ‚Æ‚·‚ê‚Ε¶Žš‰»‚¯‚Í‹N‚±‚è‚Ü‚¹‚ñ‚ªAƒVƒ“ƒOƒ‹ƒNƒI[ƒg‚Å‚à–h‚°‚È‚¢•¶Žš‰»‚¯‚âƒGƒ‰[‚ª‚ ‚è‚Ü‚·iŽŸ—ájB
-ƒGƒ‰[‚É‚Í‚È‚ç‚È‚¢‚¯‚Ç•¶Žš‰»‚¯‚·‚éi‚Qj
-—Ⴆ‚ÎA"ƒ~ƒ\\500" ‚Æ‚¢‚¤ƒŠƒeƒ‰ƒ‹‚Å‚ÍA\ ‚ª’E—Ž‚µ‚Ä‚µ‚Ü‚¢‚Ü‚·B‚±‚ê‚ÍA'ƒ~ƒ\\500' ‚â q(ƒ~ƒ\\500) ‚È‚Ç‚Æ‚µ‚Ä‚à–h‚®‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñB‚»‚ê‚Í \\ ‚Æ‚¢‚¤˜A‘±‚ª‚ ‚é‚Æ \ ‚PŒÂ‚É‚È‚Á‚Ä‚µ‚Ü‚¤‚Æ‚¢‚¤‹K‘¥‚ª‚ ‚é‚©‚ç‚Å‚·B
-ƒNƒI[ƒg‚âƒNƒI[ƒg•—‰‰ŽZŽq‚Ì’†‚Å‚ÍA•¶Žš—ñ‚ɃNƒI[ƒg‚Æ“¯‚¶•¶Žš‚ðŠÜ‚ß‚ç‚ê‚é‚悤‚ÉA\ ‚É‚æ‚éƒGƒXƒP[ƒv‚ð•t‚¯‚ê‚΃NƒI[ƒg‚ÌI’[•¶Žš‚Å‚Í‚È‚­A•¶Žš—ñ‚̈ꕔ‚Æ‚Ý‚È‚µ‚Ü‚·B‚»‚Ì‚½‚ßA\\ ‚ª \ ‚Ì•¶Žš‚ð•\‚·ƒGƒXƒP[ƒv‚É‚È‚è‚Ü‚·B‚±‚ê‚̓NƒI[ƒg‚ÌŽn’[EI’[•¶Žš‚ð‰½‚É‚µ‚Ä‚à“¯‚¶‚±‚Æ‚Å‚·B
-ƒGƒ‰[‚É‚Í‚È‚ç‚È‚¢‚¯‚Ç•¶Žš‰»‚¯‚·‚éi‚Rj
-—Ⴆ‚ÎA"ŠÛ\net" ‚Æ‚¢‚¤ƒŠƒeƒ‰ƒ‹‚ª•¶Žš‰»‚¯‚ð‹N‚±‚µ‚Ü‚·B‚±‚ê‚Í "ŠÛ¥
-et" ‚̂悤‚É“r’†‚ʼnüs‚³‚ê‚Ä‚µ‚Ü‚¢‚Ü‚·B‚±‚ê‚ÍA"\" ‚Ì‘æ‚QƒoƒCƒg‚ª \ ‚Å‚ ‚邽‚ßAƒ_ƒuƒ‹ƒNƒI[ƒg•¶Žš‚Ì’†‚Å‚ÍŽŸ‚Ì 'n' ‚Ƈ‚킹‚Ä\n‚Ì‚·‚È‚í‚¿‰üs•¶Žš‚ð•\‚·ƒƒ^•¶Žš‚Æ‚µ‚ĉðŽß‚³‚ê‚é‚©‚ç‚Å‚·B
-ƒGƒ‰[‚É‚Í‚È‚ç‚È‚¢‚¯‚Ç•¶Žš‰»‚¯‚·‚éi‚Sj
-—Ⴆ‚ÎA"ˆø”@ARGV" ‚Æ‚¢‚¤ƒŠƒeƒ‰ƒ‹‚ª•¶Žš‰»‚¯‚ð‹N‚±‚µ‚Ü‚·B‚±‚ê‚ÍA"@"i‘SŠpƒXƒy[ƒXj‚Ì‘æ‚QƒoƒCƒg‚ª @ ‚Å‚ ‚邽‚ßAƒ_ƒuƒ‹ƒNƒI[ƒg•¶Žš‚Ì’†‚Å‚ÍŽŸ‚Ì ARGV ‚Ƈ‚킹‚Ä "@ARGV" ‚Æ‚¢‚¤”z—ñ‚Æ‚µ‚Ä•Ï”“WŠJ‚ðs‚¤‚©‚ç‚Å‚·B@ARGV‚̂悤‚É•K‚¸’è‹`‚³‚ê‚é‚悤‚È”z—ñ‚È‚çA“WŠJ‚³‚ê‚Ü‚·‚ªA•Ê‚Ìꇂł̓Gƒ‰[‚É‚È‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñi‚»‚ê‚ÍŽŸ€‚ðŽQÆjB
-In string, @dog now must be written as \@dog (Perl 5.6.0‚Ü‚Å)
-u•¶Žš—ñ‚Ì’†‚Å‚ÍA@dog‚Í¡‚Í\@dog‚Æ‘‚©‚È‚¯‚ê‚΂Ȃç‚È‚¢v
-‘O—á‚Å‚Ý‚½‚悤‚ÉA‘SŠpƒXƒy[ƒX "@"‚Ì‘æ‚QƒoƒCƒg‚Í @ ‚Å‚ ‚邽‚ßAŒã‚ë‚Ì•¶Žš‚Ƈ‚킹‚Ä”z—ñ‚Å‚ ‚é‚©‚̂悤‚ɉðŽß‚µ‚悤‚Æ‚µ‚Ü‚·B"Œ¢@dog" ‚̂悤‚Èê‡A@dog ‚Æ‚¢‚¤”z—ñ‚ª’è‹`‚³‚ê‚Ä‚¢‚ê‚΂»‚ê‚ð—p‚¢‚Ä•Ï”“WŠJ‚µ‚Ü‚·‚ªA’è‹`‚³‚ê‚Ä‚¢‚È‚¢ê‡AƒGƒ‰[ƒƒbƒZ[ƒW‚ðo‚µ‚Ü‚·B
-``now must be written as''u¡‚Í‚±‚¤‘‚©‚È‚¯‚ê‚΂Ȃç‚È‚¢v‚Æ‚ÍAPerl4‚Ü‚Å‚Í”z—ñ‚Ì•Ï”“WŠJ‚Ís‚í‚È‚©‚Á‚½‚½‚ßA"hoge@foo.bar" ‚̂悤‚È‘‚«•û‚ð‚·‚é‚±‚Æ‚ª‚Å‚«‚½‚Ì‚¾‚ªA¡ Perl‚Å‚Í @foo ‚ª“WŠJ‚³‚ê‚Ä‚µ‚Ü‚¤‚Ì‚ÅA’ˆÓ‚ðŠ«‹N‚·‚邽‚߃Gƒ‰[‚ðo‚·‚悤‚É‚µ‚Ä‚¢‚é‚悤‚Å‚·i‚à‚µPerl‚ªÌ‚©‚ç”z—ñ‚Ì“WŠJ‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚½‚çAƒGƒ‰[‚ðo‚·‚±‚Æ‚È‚­A–Ù‚Á‚Ä“WŠJ‚·‚邾‚¯‚¾‚Á‚½‚©‚à‚µ‚ê‚Ü‚¹‚ñBŽŸ€‚àŽQÆjB
-"Œ¢@\dog" ‚Æ‚·‚ê‚΂¢‚¢‚Æ‚¢‚¤ˆÓŒ©‚à‚ ‚è‚Ü‚·‚ªA\d ‚ªƒƒ^•¶Žš‚Æ‚µ‚Ä“Á•ÊˆÓ–¡‚ª‚È‚¢‚½‚ß‚É‚¤‚Ü‚­‚¢‚­‚Ì‚Å‚ ‚Á‚ÄiPerl 5.6ˆÈ~‚Å‚ÍAŒx Unrecognized escape \d passed through u”FŽ¯‚Å‚«‚È‚¢ƒGƒXƒP[ƒv \d ‚ª“n‚³‚ꂽv‚ðˆø‚«‹N‚±‚µ‚Ü‚·jA—Ⴆ‚Î "‰Ô@\flower" ‚Ì‚Æ‚«‚ÍA\f ‚ª‰üƒy[ƒW•¶Žš‚Æ‚µ‚ĉðŽß‚³‚êA•¶Žš‰»‚¯‚µ‚Ü‚·B
-Possible unintended interpolation of @dog in string (Perl 5.6.1ˆÈ~)
-•¶Žš—ñ‚Ì’†‚ÅA@dog‚ª—\Šú‚¹‚¸‚É“WŠJ‚³‚ê‚é
-‘O€‚Æ“¯‚¶‚­A"Œ¢@dog" ‚Å‚·‚ªAPerl 5.6.1iActivePerl 626jˆÈ~‚Å‚ÍA’è‹`‚³‚ê‚Ä‚¢‚È‚¢”z—ñ‚Å‚à–Ù‚Á‚Ä“WŠJ‚µ‚Ü‚·B”z—ñ @dog ‚ª“WŠJ‚³‚ê‚é‚Ì‚ÅA"Œ¢\x81" ‚Æ“¯‚¶‚É‚È‚è‚Ü‚·B
-‚±‚ê‚̓Gƒ‰[‚Å‚Í‚È‚­AŒx‚É‚È‚è‚Ü‚·B
-Can't find string terminator '"' anywhere before EOF
-uI’[•¶Žš '"'‚ªƒtƒ@ƒCƒ‹‚ÌI‚è EOF ‚Ü‚Å‚ÉŒ©‚‚©‚ç‚È‚©‚Á‚½v
-—Ⴆ‚ÎA"‘Ήž•\" ‚̂悤‚ȃŠƒeƒ‰ƒ‹‚Å‚ÍA'•\' ‚Ì‘æ‚QƒoƒCƒg‚ª \ ‚Å‚ ‚邽‚ßA‚¤‚µ‚ë‚Ì " ‚ðƒGƒXƒP[ƒv‚µ‚Ä‚µ‚Ü‚¢‚Ü‚·B‚±‚Ì‚½‚ßperl‚ÍA‚»‚Ì " ‚̓NƒI[ƒg•¶Žš—ñ‚ÌI’[•¶Žš‚Æ‚Í‚Ý‚È‚³‚¸‚ÉA•¶Žš—ñ‚ª‚³‚ç‚É‘±‚­‚Æl‚¦‚Ä‚µ‚Ü‚¢‚Ü‚·B‚±‚êˆÈ~AƒXƒNƒŠƒvƒg‚Ì’†‚É " ‚Ì•¶Žš‚ª‘S‚­ŠÜ‚Ü‚ê‚È‚¯‚ê‚ÎA‚±‚̂悤‚ɃGƒ‰[•ñ‚ð‚µ‚Ü‚·B
-qq{ "“ú–{Œê" }‚̂悤‚Èê‡‚É‚à’ˆÓ‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB"–{" ‚Ì‘æ“ñƒoƒCƒg‚Í { ‚È‚Ì‚ÅA‚±‚Ì‚Ü‚Ü‚Å‚Í { }‚̃lƒXƒg‚ª‚¸‚ê‚Ä‚µ‚Ü‚¢A“¯—l‚̃Gƒ‰[‚ª”­¶‚µ‚Ü‚·B
-Bareword found where operator expected
-u—‡‚̌ꂪ‰‰ŽZŽq‚ª‚ ‚Á‚Ä‚Ù‚µ‚¢ˆÊ’u‚ÉŒ©‚‚©‚Á‚½v
-—Ⴆ‚ÎAprint "<img alt=\"‘Ήž•\\" height=115 width=150>"; ‚̂悤‚Èê‡A\" ‚É‚æ‚éˆø—p•„‚̃GƒXƒP[ƒv‚ÍA•\ ‚Ì‘æ‚QƒoƒCƒg‚Ì\‚Ì‚½‚ßA\\ " ‚Æ‚¢‚¤‘g‚݇‚킹‚É‚È‚èAƒGƒXƒP[ƒv‚ª‘Å‚¿Á‚³‚ê‚Ä‚¢‚Ü‚·B‚»‚Ì‚½‚ßA‚±‚̃Šƒeƒ‰ƒ‹‚ÍAperl‚©‚猩‚é‚ÆA"<img alt=\"‘Ήž•\\" ‚ÅI‚í‚Á‚Ä‚¢‚Ü‚·B‚»‚Ì‚½‚ßAƒŠƒeƒ‰ƒ‹‚ÌŒã‚ÉAheight ‚Æ‚¢‚¤u—‡‚ÌŒêviƒNƒI[ƒg‚ň͂܂ê‚Ä‚¢‚È‚¢•¶Žš—ñj‚ª‚ ‚é‚悤‚É‚Ý‚ÄA‚±‚±‚É‚Í—‡‚ÌŒê‚Å‚Í‚È‚­A‰‰ŽZŽq‚ª‚ ‚é‚ׂ«‚Å‚Í‚È‚¢‚©H‚Æperl‚Íl‚¦‚Ü‚·B
-Unrecognized character \x82
-u”FŽ¯‚³‚ê‚È‚¢•¶Žš \x82v
-‚±‚ê‚ÍA”ñASCII•¶Žš‚â‚»‚Ì‘¼‚Ì•¶Žš‚ðu—‡‚ÌŒêv‚É‚µ‚½‚Æ‚«‚Éo‚郃bƒZ[ƒW‚Å‚·B"‘Ήž•\" ‚̂悤‚ȃŠƒeƒ‰ƒ‹‚ª‚ ‚Á‚ÄA‚»‚Ì‚ ‚Æ‚É "‚È‚ñ‚Å‚à‚¢‚¢‚¯‚Ç" ‚̂悤‚ȃŠƒeƒ‰ƒ‹‚ª‚ ‚Á‚½‚Æ‚«A‘O—á‚Æ“¯‚¶——R‚©‚ç‹N‚±‚é‚à‚Ì‚Å‚·B
-‚Ü‚½Aq{ƒ}ƒbƒ`} ‚̂悤‚ÈꇂɂàA'ƒ}' ‚Ì‘æ“ñƒoƒCƒg‚ª } ‚È‚Ì‚ÅA{ } ‚̃JƒbƒR‚Í‚»‚±‚ÅI‚í‚Á‚Ä‚µ‚Ü‚¢A“¯—l‚ȃGƒ‰[‚É‚È‚è‚Ü‚·B
-ƒ}ƒbƒ`‚µ‚È‚¢‚Í‚¸‚Ȃ̂Ƀ}ƒbƒ`‚·‚éi‚Pj
-"ƒ„ƒJƒ“" =~ /ƒ|ƒbƒg/ ‚̓}ƒbƒ`‚µ‚Ü‚·B‚»‚ê‚ÍA'ƒ|' ‚Ì‘æ“ñƒoƒCƒg‚ª | ‚È‚Ì‚ÅA/ƒ|ƒbƒg/ ‚Í /\x83|ƒbƒg/ ‚Æ‚Ý‚È‚³‚êA\x83 ‚¾‚¯ƒ}ƒbƒ`‚·‚ê‚΂悢‚©‚ç‚Å‚·B
-ƒ}ƒbƒ`‚µ‚È‚¢‚Í‚¸‚Ȃ̂Ƀ}ƒbƒ`‚·‚éi‚Qj
-"ŒZ’í" =~ /Z/ ‚̓}ƒbƒ`‚µ‚Ü‚·B‚»‚ê‚ÍA'ŒZ' ‚Ì‘æ“ñƒoƒCƒg‚ª 'Z' ‚¾‚©‚ç‚Å‚·B‘æ“ñƒoƒCƒg‚ªƒAƒ‹ƒtƒ@ƒxƒbƒg‚ɂȂ镶Žš‚É‚Í’ˆÓ‚ª•K—v‚Å‚·B
-ƒ}ƒbƒ`‚·‚é‚Í‚¸‚Ȃ̂Ƀ}ƒbƒ`‚µ‚È‚¢i‚Pj
-"‰^“]–Æ‹–" =~ /‰^“]/ ‚̓}ƒbƒ`‚µ‚Ü‚¹‚ñB‚»‚ê‚ÍA'‰^' ‚Ì‘æ“ñƒoƒCƒg‚ª '^'‚È‚Ì‚ÅA/‰^“]/ ‚Í /\x89^“]/ ‚Æ‚Ý‚È‚³‚êA•¶Žš—ñ‚ÌŽn‚ß ^ ‚Ì‘O‚É \x89 ‚Í‚È‚¢‚©‚ç‚Å‚·B
-Search pattern not terminated
-uƒT[ƒ`ƒpƒ^[ƒ“‚ªI—¹‚µ‚È‚¢v
-‚±‚ê‚ÍA/•\/ ‚̂悤‚ÉA‘æ“ñƒoƒCƒg‚ª \ ‚Å‚ ‚镶Žš‚ŃT[ƒ`ƒpƒ^[ƒ“‚ðI‚í‚点‚悤‚Æ‚µ‚½‚Æ‚«‚É‹N‚±‚è‚Ü‚·Bƒ}ƒbƒ`‰‰ŽZŽq‚ÌI’[•¶Žš / ‚ðƒGƒXƒP[ƒv‚µ‚Ä‚µ‚Ü‚¤‚Ì‚ÅAƒT[ƒ`ƒpƒ^[ƒ“‚ª‚³‚ç‚Éæ‚É‘±‚­‚悤‚ɉðŽß‚³‚ê‚Ü‚·B‚»‚Ìæ‚É‚à‚¤ˆê“x/‚Í‚ ‚è‚Ü‚·‚©H
-‚ ‚Á‚½‚Æ‚±‚ë‚ÅA•Ê‚̃Gƒ‰[‚ª”­¶‚·‚é‚Å‚µ‚傤B
-Substitution replacement not terminated
-u’uŠ·‘€ì‚Ì’uŠ·•¶Žš—ñ‚ªI—¹‚µ‚È‚¢v
-’uŠ·‰‰ŽZŽq‚Í s/PATTERN/REPLACEMENT/‚ÌŒ`Ž®‚ð‚Æ‚ç‚˂΂Ȃè‚Ü‚¹‚ñB‚µ‚©‚µ s/•\/— /; ‚̂悤‚ÉA‘æ“ñƒoƒCƒg‚ª \ ‚Å‚ ‚镶Žš‚ÅPATTERN•”•ª‚ðI‚í‚点‚悤‚Æ‚µ‚½‚Æ‚«‚É‚±‚̃Gƒ‰[‚ª‹N‚±‚è‚Ü‚·Bƒ}ƒbƒ`‰‰ŽZŽq‚ÌI’[•¶Žš / ‚ðƒGƒXƒP[ƒv‚µ‚Ä‚µ‚Ü‚¤‚Ì‚ÅAPATTERN‚ª‚³‚ç‚Éæ‚É‘±‚­‚悤‚ɉðŽß‚³‚ê‚Ü‚·B‚»‚Ì‚½‚ßperl‚ÍAPATTERN‚Í •\/—  ‚Ì•”•ª‚Å‚ ‚é‚Æl‚¦A‚R”Ô–Ú‚Ì/‚Ìæ‚ÉREPLACEMENT•”•ª‚ª‚ ‚é‚ɈႢ‚È‚¢‚ÆŽv‚¤‚Ì‚Å‚·‚ªA‚»‚Ìæ‚É‚à‚¤ˆê“x/‚Í‚ ‚è‚Ü‚·‚©H
-‚ ‚Á‚½‚Æ‚±‚ë‚ÅA•Ê‚̃Gƒ‰[‚ª”­¶‚·‚é‚Å‚µ‚傤B
-unmatched [ ] in regexp
-u³‹K•\Œ»‚Ƀ}ƒbƒ`‚µ‚È‚¢ [ ] ‚ª‚ ‚év
-—Ⴆ‚ÎA/ƒv[ƒ‹/ ‚ł̓Gƒ‰[‚ª‹N‚±‚è‚Ü‚·B‚»‚ê‚Í '[' ‚Ì‘æ“ñƒoƒCƒg‚ª [ ‚È‚Ì‚ÅA/ƒv[ƒ‹/ ‚Í /ƒv\x81[\x83\x8B/ ‚Æ‚Ý‚È‚³‚êAperl‚Í•¶ŽšƒNƒ‰ƒX‚ª‚ ‚é‚Ì‚Å‚Í‚È‚¢‚©‚ÆŽv‚¢‚Ü‚·B‚µ‚©‚µ•¶ŽšƒNƒ‰ƒX‚ÌI—¹‚ðŽ¦‚· ] ‚ªŒ©‚‚©‚ç‚È‚¢‚̂ŃGƒ‰[‚É‚È‚è‚Ü‚·B
-ƒGƒ‰[‚É‚Í‚È‚ç‚È‚¢‚¯‚Ç•¶Žš‰»‚¯‚·‚éi‚Tj
-—Ⴆ‚ÎAlc('ƒAƒCƒEƒGƒI')‚ÍA'ƒaƒcƒeƒgƒi'‚ð•Ô‚µ‚Ü‚·BShift-JIS‚Ì‚QƒoƒCƒg•¶Žš‚Ì’†‚É‚ÍA‘æ‚QƒoƒCƒg‚ªASCII‚ʼnpŽš‚É“–‚½‚é‚à‚Ì‚ª‚ ‚è‚Ü‚·BÚ‚µ‚­‚̓Aƒ‹ƒtƒ@ƒxƒbƒg‚̑啶Žš‚Ƭ•¶Žš‚ð‚²——‰º‚³‚¢B
-ƒGƒ‰[‚âŠÔˆá‚¢‚ð–h‚®‘Îô
-ˆÈã‚̂悤‚ȃGƒ‰[‚ð–h‚®‚É‚Í‚³‚Ü‚´‚Ü‚È•û–@‚ªl‚¦‚ç‚ê‚Ü‚·B—Ⴆ‚ÎA"•\\Ž¦" ‚Æ‘‚¯‚΂¢‚¢‚È‚Ç‚Æ‚¢‚¤’ñˆÄ‚ª‚ ‚è‚Ü‚·B‚à‚¿‚ë‚ñ‚»‚ê‚Å‚à‚©‚Ü‚¢‚Ü‚¹‚ñB‚µ‚©‚µ‚»‚Ì‚½‚ß‚É‚Í‚Ç‚Ì•¶Žš‚ÌŒã‚É \ ‚ð“ü‚ê‚ê‚΂¢‚¢‚©‚ð’m‚é•K—v‚ª‚ ‚è‚Ü‚·B‚»‚ê‚Í•¶ŽšƒR[ƒh•\‚ðŒ©‚ê‚Έꔭ‚Å–¾‚ç‚©‚Å‚·B
-c‚È‚Ç‚Æ‚¢‚¤–Ê“|‚È‚±‚Æ‚ª‹ê‚É‚È‚ç‚È‚¢lA•¶ŽšƒR[ƒh•\‚È‚ñ‚©i­‚È‚­‚Æ‚à–â‘è‚É‚È‚é‚悤‚È•¶Žš‚­‚ç‚¢‚ÍjˆÃ‹L‚µ‚Ä‚µ‚Ü‚¦‚΂¢‚¢‚Æ‚¢‚¤‚悤‚Èl‚É‚Æ‚Á‚Ä‚ÍAŠm‚©‚É‚»‚ê‚Å‰ðŒˆ‚É‚È‚é‚ÆŽv‚¢‚Ü‚·B‚µ‚©‚µA‚»‚̂悤‚Èl‚É‚ÍA‚±‚ñ‚ȃy[ƒW‚ðŒ©‚É‚­‚é•K—v‚àƒqƒ}‚à‚È‚¢‚Å‚µ‚傤B
-‚»‚±‚ÅA‚±‚̂悤‚ȃy[ƒW‚ð‚í‚´‚í‚´Œ©‚É‚­‚é‚悤‚Èl‚ÍA•¶ŽšƒR[ƒh•\‚ð‚¢‚¿‚¢‚¿’²‚ׂ½‚­‚È‚¢‚ЂƂ¾‚Ɖ¼’肵‚Ü‚·B•Ê‚É‚»‚¤‚¾‚©‚ç‚Æ‚¢‚Á‚Ä”ñ“‚ê‚邱‚Æ‚Í‚ ‚è‚Ü‚¹‚ñB‚µ‚©‚µAŽèŠÔ‚ðÉ‚µ‚Þ‚ ‚Ü‚èŠÔˆá‚Á‚½ƒvƒƒOƒ‰ƒ€‚𕽋C‚Åì‚Á‚Ä‚¢‚Ä‚ÍAŠç‚ɃNƒŠ[ƒ€ƒpƒC‚ð‚Ԃ‚¯‚ç‚ê‚Ä‚àŽd•û‚ ‚è‚Ü‚¹‚ñB
-•¶Žš—ñƒŠƒeƒ‰ƒ‹‚Ìì‚è•û
-‚æ‚­’m‚Á‚Ä‚¨‚©‚˂΂Ȃç‚È‚¢‚±‚Æ‚ÍA\ ‚Æ‚¢‚¤ƒGƒXƒP[ƒv—p‚Ì•¶Žš‚ÍA•Ï”“WŠJ‚⃃^•¶Žš‚̉ðŽß‚æ‚肸‚Á‚Æ‘O‚Ì’iŠK‚Å‚³‚Ü‚´‚܂ȉe‹¿‚ð‹y‚Ú‚·‚Æ‚¢‚¤‚±‚Æ‚Å‚·B‚»‚Ì‚½‚ßA‚Ç‚¤‚µ‚½‚çƒf[ƒ^‚ðŠmŽÀ‚É•Ï”‚Ì’†‚ÉŽû‚ß‚ç‚ê‚é‚©‚ðl‚¦‚é•K—v‚ª‚ ‚è‚Ü‚·B•Ï”‚Ì“à•”‚ÉŽû‚ß‚Ä‚µ‚Ü‚¦‚ÎAPerl‚ªƒf[ƒ^‚ð“KØ‚ÉŠÇ—‚µ‚Ä‚­‚ê‚Ü‚·B‚æ‚­’m‚ç‚ê‚Ä‚¢‚é $str = "•\Ž¦" ‚Ì•¶Žš‰»‚¯‚àA•Ï”$str‚É‘ã“ü‚·‚éˆÈ‘OAƒ_ƒuƒ‹ƒNƒH[ƒg‚ň͂ñ‚¾Žž“_‚Å‚·‚Å‚É•¶Žš‰»‚¯‚µ‚Ä‚¢‚é‚Æl‚¦‚é‚ׂ«‚Å‚·B‚·‚Å‚É•¶Žš‰»‚¯‚µ‚½ƒf[ƒ^‚ð‘ã“ü‚µ‚ÄAD‚¢Œ‹‰Ê‚ª“¾‚ç‚ê‚é‚Í‚¸‚ª‚ ‚è‚Ü‚¹‚ñB
-ƒqƒAƒhƒLƒ…ƒƒ“ƒg‚͈À‘S«‚Ì‚‚¢‰ðŒˆ–@‚Å‚·B‚½‚¾‚µAI’[•¶Žš—ñ‚ðƒVƒ“ƒOƒ‹ƒNƒH[ƒg‚ň͂ñ‚Å‚â‚ç‚È‚­‚Ä‚Í‚È‚è‚Ü‚¹‚ñBƒ_ƒuƒ‹ƒNƒH[ƒg‚ň͂ñ‚¾‚èAƒNƒH[ƒg‚ð•t‚¯‚È‚©‚Á‚½‚è‚Å‚ÍA—\Šú‚¹‚Ê•Ï”“WŠJ‚⃃^•¶Žš‚̉ðŽß‚ð–h‚®‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñB
-ƒVƒ“ƒOƒ‹ƒNƒH[ƒg‚ÅI’[•¶Žš—ñ‚ðˆÍ‚ñ‚¾ƒqƒAƒhƒLƒ…ƒƒ“ƒg‚Å‚ÍA•Ï”“WŠJ‚⃃^•¶Žš‚̉ðŽß‚͉½‚à‹N‚±‚è‚Ü‚¹‚ñB‚½‚¾AI’[•¶Žš—ñi‚±‚Ìê‡‚Í "\nEOF\n"j‚ð’T‚·‚±‚Æ‚¾‚¯‚ðs‚¢‚Ü‚·BƒqƒAƒhƒLƒ…ƒƒ“ƒg‚ðŽg‚¤‚Æ•¶Žš—ñ‚ɉüs•¶Žš‚ª‚‚«‚Ü‚·‚ªAchomp‚Åœ‚­‚Æ‚¢‚¢‚Å‚µ‚傤B
-ŽŸ‚Ì—á‚Í $str = '‚±‚±‚ɃeƒLƒXƒg‚ð‘‚­' ‚Æ“¯‚¶‚悤‚É“­‚«‚Ü‚·‚ªA•¶Žš—ñ‚Ì“à—e‚É‚æ‚Á‚Ä–â‘肪‹N‚±‚è‚Ü‚¹‚ñB‘‚¢‚½‚Æ‚¨‚è‚ɃŠƒeƒ‰ƒ‹‚ð‘ã“ü‚Å‚«‚é‚ÆŠú‘Ò‚Å‚«‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-chomp($str = << 'EOF');
-‚±‚±‚ɃeƒLƒXƒg‚ð‘‚­
-EOF
-
-$src = << 'EOF';
- $path = "C:\\path\\file";
- open FH, $path;
-EOF
-
-‘½‚­‚Ì•¶Žš—ñ‚ðˆê“x‚Éì‚肽‚¯‚ê‚ÎAsplit‚Å•ªŠ„‚·‚é‚Æ—eˆÕ‚Éì‚ê‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-($name, $career, $age, $memo) = split "\n", << 'EOF';
-“c’†ˆê˜Y
-ƒvƒƒOƒ‰ƒ}
-ŽO\ŒÜ
-‘å•Ÿ‚ªD•¨‚Å‚ ‚éB Žð‚Í‚ ‚Ü‚è“Û‚Ü‚È‚¢B
-EOF
-
-‚à‚¤­‚µŠÈŒ‰‚É‘‚«‚½‚¯‚ê‚ÎA‹ó”’•¶ŽšA\i‚QƒoƒCƒg•¶Žš‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚é‚Ì‚Í\‚í‚È‚¢jA‚¨‚æ‚уJƒbƒR‚ðŠÜ‚Ü‚È‚¢‚Æ‚¢‚¤ðŒ‚ÅAqw() ‚ðŽg‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B—Ⴆ‚ÎA@str = qw(•\Ž¦ ‘Ήž•\ );‚̂悤‚É‹ó”’‚ð“ü‚ê‚ăJƒbƒR‚̃GƒXƒP[ƒv‚ð–h‚¬‚Ü‚·B@str = qw(•\Ž¦ ‘Ήž•\);‚̂悤‚É‹ó”’‚ð“ü‚ê‚È‚¢‚ƃGƒ‰[‚ÌŒ³‚Å‚·B
-‚P‚‚̕¶Žš—ñ‚ðì‚鎞‚Å‚àA¶•Ó‚ðŠÛƒJƒbƒR‚ň͂ñ‚ŃŠƒXƒgƒRƒ“ƒeƒLƒXƒg‚ðŽ¦‚·‚©A‰E•Ó‚ðƒXƒ‰ƒCƒX‚É‚·‚é‚©‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚ê‚ÍAiŒ»ó‚Å‚Íjqw// ‚Í split(' ', q//) ‚Ì—ª‹L‚Æ‚µ‚ÄŽÀ‘•‚µ‚Ä‚¢‚é‚©‚ç‚Å‚·B‚È‚¨APerl 5.6‚ł̓ŠƒXƒg‚Æ“™‰¿‚É‚È‚Á‚Ä‚¢‚é‚悤‚Å‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-($str) = qw(•SŽO\ );
- $str = (qw/•SŽO\ /)[0];
- $str = qw/•SŽO\ /; # Perl 5.6
-
-³‹K•\Œ»‚ƃ}ƒbƒ`
-³‹K•\Œ»‚̃ƒ^•¶Žš‚Í‘½‚¢‚Ì‚ÅA³‹K•\Œ»‚Ì’†‚ÉShift-JIS‚Ì•¶Žš—ñ‚ð–„‚ß‚±‚Þ‚Ì‚Í“¾ô‚Å‚Í‚ ‚è‚Ü‚¹‚ñB—Ⴆ‚ÎA/\Q‘Ήž•\/ ‚ł̓Gƒ‰[‚É‚È‚è‚Ü‚·B‚±‚ê‚ÍA/ / ‚͈̔͂̌ˆ’肪^‚Áæ‚És‚í‚êA‚»‚ÌŽž“_‚ŃGƒ‰[‚ª”­¶‚·‚é‚Ì‚ÅA\Q ‚ÌŒø‰Ê‚ð‹y‚Ú‚·‚±‚Æ‚ª‚Å‚«‚È‚¢‚©‚ç‚Å‚·B‚Ü‚½A/\Q‘Ήž•\\E/ ‚ÍI‚­s‚«‚Ü‚¹‚ñB‚±‚ê‚ÍA‘Ήž•\\E ‚Æ‚¢‚¤•¶Žš—ñ‚ðŠÜ‚Þ‚à‚Ì‚É‚µ‚©ƒ}ƒbƒ`‚µ‚Ü‚¹‚ñB‚±‚ê‚ÍA\\ ‚Æ‚¢‚¤˜A‘±‚ª‚ ‚邽‚ßA\E ‚ª”FŽ¯‚³‚ê‚È‚¢‚©‚ç‚Å‚µ‚傤i‚½‚Ô‚ñjB
-‚»‚Ì‚½‚ßA•Ï”‚É“ü‚ê‚ÄAƒ}ƒbƒ`‰‰ŽZŽq‚â’uŠ·‰‰ŽZŽq‚Ì’†‚Å“WŠJ‚³‚¹‚é‚Æ‚æ‚낵‚¢‚Å‚·B‚±‚Ì‚Æ‚«“ú–{Œê•¶Žš—ñ‚Í—\‚ßquotemeta ŠÖ”‚ň—‚µ‚Ä‚¨‚«‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$pat = quotemeta +(qw/ •\ /)[0];
-$str =~ /$pat\d+/; # •\1, •\2, ..‚ȂǂɃ}ƒbƒ`
- # ‚µ‚©‚µ $str = 'Œ•\\1' ‚Å‚àƒ}ƒbƒ`‚·‚éi‚±‚Ì–â‘è‚ÍŒãqj
-
-ã‚̂悤‚È‘‚«•û‚ÍŠm‚©‚ÉX‚¢‚Å‚·‚ËBƒNƒI[ƒg‚Ì’†‚Å \Q \E ‚ðŽg‚¤Žž‚ÍA³‚µ‚¢•¶Žš—ñ‚ª“ü‚Á‚Ä‚¢‚é•Ï”‚ƈê‚É‚È‚ç–â‘肪‹N‚±‚è‚Ü‚¹‚ñB‚±‚¤‚·‚邱‚Æ‚ÅA\Q \E ‚͈̔͂ª–¾Šm‚É‚È‚é‚©‚ç‚Å‚·B³‚µ‚¢•¶Žš—ñ‚Ìì‚è•û‚ÍA‘Oq‚̃Šƒeƒ‰ƒ‹‚Ìì‚è‚©‚½‚ðŽQl‚É‚µ‚ĉº‚³‚¢B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$pat = "(?:\Q$str1\E|\Q$str2\E)*";
-$str =~ /$pat/;
-
-# ŽÀ‚Íã‚Ì•¶‚ÍŽŸ‚Ì•¶‚Æ“™‰¿B
-# $pat = "(?:" . quotemeta($str1) . "|" . quotemeta($str2) . ")*";
-
-ƒŠƒeƒ‰ƒ‹‚ðƒNƒH[ƒg‚Ì’†‚É’¼Ú–„‚ß‚±‚Þ‚Æ‚¤‚Ü‚­s‚©‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·B‚»‚ê‚ÍAperl‚ª \E ‚Æ‚¢‚¤ƒƒ^•¶Žš‚ð”­Œ©‚µ‚悤‚Æ‚¢‚¤‚Ì‚ðAShift-JIS•¶Žš‚ª–W‚°‚邽‚ß‚Å‚·B
-"\Q•\\E"‚Å‚ÍA•\E‚Ƀ}ƒbƒ`‚·‚鳋K•\Œ»‚É‚È‚è‚Ü‚·B•\‚Ì‘æ“ñƒoƒCƒg‚Ì \ ‚ÆŽŸ‚Ì \‚ª‡‚킳‚é‚Ì‚ÅAperl‚É‚Í\Q \x95 \\ E‚Ì‘g‚݇‚킹‚Å‚ ‚é‚悤‚ÉŽv‚í‚ê‚Ü‚·B \Q‚Ìì—p‚ÌŒ‹‰Ê‚Í\\x95\\x5cE‚É‚È‚è‚Ü‚·B‚»‚Ì‚½‚ßA•\E‚Ƀ}ƒbƒ`‚µ‚Ü‚·B
-"\Q•\"‚Í‚Ç‚¤‚Å‚µ‚傤B‚±‚ÌꇂÍA" " ‚Ì”ÍˆÍ‚ðŒˆ‚ß‚é‚Æ‚«‚ÉA•\‚Ì‘æ“ñƒoƒCƒg‚ªŒã‚̃NƒH[ƒg‚ðƒGƒXƒP[ƒv‚µ‚Ä‚µ‚Ü‚¤‚Ì‚ÅA•¶Žš—ñ‚͈̔͂ªŠú‘Ò‚µ‚½‚悤‚É‚Í’è‚܂炸AƒGƒ‰[‚É‚È‚è‚Ü‚·B‚±‚̃Gƒ‰[‚Í\Q‚ÌŒø‰Ê‚ðl—¶‚·‚é‘O‚É”­¶‚·‚é‚Ì‚ÅA–h‚¬‚悤‚ª‚ ‚è‚Ü‚¹‚ñB
-"\Q•\\\E"‚Í‚Ç‚¤‚Å‚µ‚傤BŠm‚©‚ÉShift-JIS‚Å‚Í–â‘è‚ ‚è‚Ü‚¹‚ñB‚µ‚©‚µ“¯‚¶ƒXƒNƒŠƒvƒg‚ðEUC-JP‚âUTF-8‚É•ÏŠ·‚µ‚½‚Æ‚«‚É‚Í–â‘肪‚ ‚è‚Ü‚·B•\\E‚Æ—]•ª‚È‚Q•¶Žš‚ª‚ ‚镶Žš—ñ‚Å‚È‚¢‚ƃ}ƒbƒ`‚µ‚Ü‚¹‚ñB‚Ç‚¿‚ç‚É‚µ‚ëA\‚ð‚Ç‚±‚É“Y‚¦‚é‚©‚ðl‚¦‚é•K—v‚ª‚ ‚é‚Ì‚ÅA‚±‚±‚ÌŽïŽ|‚ɇ‚¢‚Ü‚¹‚ñB
-³‹K•\Œ»‚͗Ⴆ‚ÎAŽŸ‚̂悤‚É‚µ‚Ü‚·B‚à‚¿‚ë‚ñ‚±‚ê‚ÍShift-JIS‚Ì‚Ý‚É—LŒø‚Å‚·B
- $digit = '(?:[0-9]|\x82[\x4F-\x58])'; # ”Žši”¼Šp‚Æ‘SŠpj
- $upper = '(?:[A-Z]|\x82[\x60-\x79])'; # ƒAƒ‹ƒtƒ@ƒxƒbƒg‘啶Žši”¼Šp‚Æ‘SŠpj
- $lower = '(?:[a-z]|\x82[\x81-\x9A])'; # ƒAƒ‹ƒtƒ@ƒxƒbƒg¬•¶Žši”¼Šp‚Æ‘SŠpj
- $space = '(?:[\ \n\r\t\f]|\x81\x40)'; # ‹ó”’•¶Žši”¼Šp‚Æ‘SŠpj
- $ascii = '[\x00-\x7F]'; # ASCII•¶Žš
-
- # ‘SŠp•½‰¼–¼i‘÷“_E”¼‘÷“_E—x‚莚‚ðŠÜ‚Þj
- $hiraZ = '(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])';
-
- # ‘SŠp•Ð‰¼–¼i’·‰¹•„E‘÷“_E”¼‘÷“_E—x‚莚‚ðŠÜ‚Þj
- $kataZ = '(?:\x83[\x40-\x7E\x80-\x96]|\x81[\x5B\x4A\x4B\x52\x53])';
-
- # ”¼Šp•Ð‰¼–¼i”¼Šp’·‰¹•„E‹å“Ç“_‚ðŠÜ‚Þj
- $kataH = '[\xA1-\xDF]';
-
- $onebyte = '[\x00-\x7F\xA1-\xDF]';
- $twobyte = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
- $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
- # JIS•¶Žš
- $all_JIS = '(?:[\x00-\x7f\xa1-\xdf]|'.
- . '\x81[\x40-\x7e\x80-\xac\xb8-\xbf\xc8-\xce\xda-\xe8\xf0-\xf7\xfc]|'
- . '\x82[\x4f-\x58\x60-\x79\x81-\x9a\x9f-\xf1]|'
- . '\x83[\x40-\x7e\x80-\x96\x9f-\xb6\xbf-\xd6]|'
- . '\x84[\x40-\x60\x70-\x7e\x80-\x91\x9f-\xbe]|'
- . '\x88[\x9f-\xfc]|\x98[\x40-\x72\x9f-\xfc]|\xea[\x40-\x7e\x80-\xa4]|'
- . '[\x89-\x97\x99-\x9f\xe0-\xe9][\x40-\x7e\x80-\xfc])';
-
- # ƒxƒ“ƒ_’è‹`•¶Žš
-
- # NEC“ÁŽê•¶Žš
- $NEC_special = '(?:\x87[\x40-\x5d\x5f-\x75\x7e\x80-\x9c])';
-
- # NEC‘I’èIBMŠg’£•¶Žš
- $NEC_IBM_ext = '(?:\xed[\x40-\x7e\x80-\xfc]|\xee[\x40-\x7e\x80-\xec\xef-\xfc])';
-
- # IBMŠg’£•¶Žš
- $IBM_ext = '(?:[\xfa-\xfb][\x40-\x7e\x80-\xfc]|\xfc[\x40-\x4b])';
-
-
-Shift-JIS‚Ń}ƒbƒ`‚ðs‚¤Žž‚É‚ÍA‚Q‚‚̖â‘肪‚ ‚è‚Ü‚·B
-‘æ“ñƒoƒCƒg‚ªASCII‚̗̈æ‚É“ü‚镶Žš‚ª‚ ‚é‚Ì‚ÅAASCII‚ðŠÜ‚Þƒpƒ^[ƒ“‚Ƀ}ƒbƒ`‚·‚é‰Â”\«‚ª‚ ‚éB
-‚ ‚镶Žš‚Ì‘æ“ñƒoƒCƒg‚ÆŽŸ‚Ì•¶Žš‚Ì‘æˆêƒoƒCƒg‚ª‚P•¶Žš‚Å‚ ‚é‚©‚̂悤‚Ƀ}ƒbƒ`‚µ‚Ä‚µ‚Ü‚¤B
-ŒãŽÒ‚ÍEUC-JP‚Å‚à‹N‚±‚肤‚é–â‘è‚Å‚·iUTF-8‚È‚ç‹N‚±‚ç‚È‚¢‚ªA¡‚Í‚»‚ꂪ–â‘è‚È‚Ì‚Å‚Í‚È‚¢jB‚µ‚©‚µ‘OŽÒ‚ÍEUC-JP‚Å‚Í‹N‚±‚ç‚È‚¢‚ªAShift-JIS‚Å‚Í‹N‚±‚肤‚é–â‘è‚Å‚·B‚±‚ê‚ç‚ð–h‚®•û–@‚ÍAŒ‹‹Ç“¯‚¶‚±‚Æ‚Å‚·‚ªA³‹K•\Œ»‚Ì’†‚ÉAí‚É擪‚ðŠÜ‚Ü‚¹‚邱‚Æ‚Å‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-# 擪‚©‚çƒ}ƒbƒ`
-$str =~ /^$char*?(?:$pat)/;
-
-––”ö‚©‚ç‚̃}ƒbƒ`‚Å‚Í‚¤‚Ü‚­s‚©‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·B"‰E" =~ /E$/‚ðl‚¦‚ê‚Î\•ª‚Å‚µ‚傤B‚Ü‚½A"\x8E" x 30 . "E"‚Í$str = "ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽE"‚Å‚ ‚邪A"\x8E" x 31 . "E"‚Í$str = "ŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽE"‚Å‚ ‚è‚Ü‚·‚©‚çAShift-JIS•¶Žš—ñ‚ðŒã‚ë‚©‚ç؂蕪‚¯‚é“KØ‚È•û–@‚Í‚È‚¢‚Æl‚¦‚ç‚ê‚Ü‚·B
-­‚È‚­‚Æ‚àA‚QƒoƒCƒg•¶Žš‚ð\¬‚µ‚È‚¢ƒoƒCƒg [\x00-\x3F\x7F] ‚ªŒ©‚‚©‚銂܂ÅA‹É’[‚Èꇂ͕¶Žš—ñ‚Ìʼn‚܂ŃXƒLƒƒƒ“‚µ‚È‚¢‚Æ‚í‚©‚炸A‚µ‚©‚àŒã“Ç‚Ý lookbehind ‚̳‹K•\Œ» (?<=PATTERN)‚Í¡‚ÌŠA•s’è’·‚É‚Å‚«‚Ü‚¹‚ñi(?<=(?:\A|[\x00-\x3F\x7F])$char*) ‚Æ‚Í‚Å‚«‚È‚¢j‚Ì‚ÅA擪‚©‚當Žš’PˆÊ‚ł΂炵‚Ä‚©‚爗‚·‚é‚Ì‚ªAŒ‹‹Ç‚ÍŠÈ•Ö‚È‚Ì‚©‚à‚µ‚ê‚Ü‚¹‚ñB
-ƒOƒ[ƒoƒ‹ƒ}ƒbƒ`
-ƒOƒ[ƒoƒ‹ƒ}ƒbƒ` /g ‚ÌꇂÍA\G‚ðŽg‚¢‚Ü‚µ‚傤B\G‚Í‘O‰ñƒ}ƒbƒ`‚µ‚½•”•ª‚Ì––”ö‚ðŽw‚µ‚Ü‚·B
-ŽŸ‚Ì—á‚Å‚ÍA’uŠ·‚³‚ê‚È‚¢‚Ì‚ª–]‚Ü‚µ‚¢‚Ì‚Å‚·‚ªA\G‚ª‚È‚¢‚Ì‚ÅA擪‚©‚çŠJŽn‚µ‚Ä•¶Žš—ñ‘S‘̂܂ʼn„‚тă}ƒbƒ`‚µ‚È‚©‚Á‚½‚ ‚ÆA‰ü‚ß‚Ä擪‚©‚ç‚PƒoƒCƒgi‚ñ‚¾ˆÊ’u‚©‚çƒXƒLƒƒƒ“‚ðÄŠJ‚·‚é‚Ì‚ÅA‚¸‚ꂽˆÊ’u‚Ȃ̂Ƀ}ƒbƒ`‚µ‚½‚Æl‚¦‚Ä‚µ‚Ü‚¢‚Ü‚·B\G‚ðŽg‚í‚È‚¢‚ÆAŠÔˆá‚Á‚½ˆÊ’u‚Ƀ}ƒbƒ`‚·‚é‚©‚à‚µ‚ê‚È‚¢‚¤‚¦‚ÉA—]Œv‚ÈÄŒŸ¸‚ð‚·‚é‚Ì‚ÅAŽžŠÔ‚à‚©‚©‚è‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
- $str = 'ŽŽŽŽŽŽŽŽEŽŽŽŽŽŽŽŽE';
- $pat = 'ŽE';
- $str =~ s/\G($char*?)($pat)/${1}E/og;
- # 'ŽŽŽŽŽŽŽŽEŽŽŽŽŽŽŽŽE' ‚Ì‚Ü‚Üi³‚µ‚¢jB
-
-\G‚ð•t‚¯‚È‚¢ê‡
-
- $str = 'ŽŽŽŽŽŽŽŽEŽŽŽŽŽŽŽŽE';
- $pat = 'ŽE';
- $str =~ s/($char*?)($pat)/${1}E/og; # 'ŽE' ‚ª‚ ‚ê‚Î 'E' ‚É’uŠ·
- print $str;
- # 'ŽŽŽŽŽŽŽEŽŽŽŽŽŽŽE' ‚É‚È‚Á‚Ä‚µ‚Ü‚¤i‚¨‚©‚µ‚¢jB
-
-@@@@ŽŽŽŽŽŽŽŽEŽŽŽŽŽŽŽŽE
-‚P‰ñ–Ú@¨¨¨¨/¨¨¨¨/ iƒ}ƒbƒ`‚µ‚È‚¢j
-‚Q‰ñ–Ú@|¨¨¨Ë||||||||| iƒ}ƒbƒ`‚µ‚½‚Ì‚Å’uŠ·j
-‚R‰ñ–Ú@|||||||||¨¨¨¨/ iƒ}ƒbƒ`‚µ‚È‚¢j
-‚S‰ñ–Ú@||||||||||¨¨¨Ë iƒ}ƒbƒ`‚µ‚½‚Ì‚Å’uŠ·j
-
-@–}—áF ¨@$char‚ª‚QƒoƒCƒg•¶Žš‚Ƀ}ƒbƒ`
-@@@@@/@$char‚ª‚PƒoƒCƒg•¶Žš‚Ƀ}ƒbƒ`
-@@@@ Ë@$pat‚ªƒ}ƒbƒ`
-@@@@@|@ƒXƒLƒƒƒ“‚͈̔͊O
-
-‚½‚¾‚µAƒpƒ^[ƒ“‚ªƒ[ƒ•¶Žš•‚Ƀ}ƒbƒ`‚·‚éꇂɂÍA’ˆÓ‚ª•K—v‚Å‚·BŽŸ‚Ì—á‚ÍAuƒAv‚Ì‘O‚É 'Z' ‚ð“ü‚ê‚é‚à‚Ì‚Å‚·B‘æ‚P—á‚Í•¶Žš‚Ì‚¸‚êi'ƒA' : 0x8341‚ɑ΂µ‚Ä'‹ƒA' : 0x8B8341‚ª‚¸‚ê‚ă}ƒbƒ`‚·‚éj‚ð–h‚¢‚Å‚¢‚Ü‚¹‚ñB‘æ‚Q—á‚ÍAã‚Ì•û–@‚Åu‚¸‚êv‚ð–h‚²‚¤‚Æ‚µ‚½‚Ì‚Å‚·‚ªAZ ‚Ö‚Ì’uŠ·‚ª˜A‘±‚µ‚Ä‹N‚±‚Á‚Ä‚¢‚Ü‚·B
-‚±‚ê‚Í‘æ‚R—á‚̂悤‚É‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ÍA‘æ‚Q—á‚Å‚Íu‚È‚ºHv‚É‘‚¢‚½‚悤‚ÉA’uŠ·‚³‚ê‚é‚©‚ç‚Æl‚¦‚ç‚ê‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$str = "ƒAƒCƒEƒGƒAƒAƒCƒEƒA‹ƒA";
-
-print +($temp = $str) =~ s/(?=ƒA)/Z/g, $temp;
-
-print +($temp = $str) =~ s/\G($char*?)(?=ƒA)/${1}Z/g, $temp;
-
-print +($temp = $str) =~ s/\G(\A|$char+?)(?=ƒA)/${1}Z/g, $temp;
-
-Œ‹‰Ê
-5 ZƒAƒCƒEƒGZƒAZƒAƒCƒEZƒA‹ZƒA
-7 ZƒAƒCƒEƒGZZƒAZZƒAƒCƒEZZƒA‹ƒA
-4 ZƒAƒCƒEƒGZƒAZƒAƒCƒEZƒA‹ƒA
-
-‚È‚ºH
- ƒA ƒC ƒE ƒG ƒA ƒA ƒC ƒE ƒA ‹ƒ A
-1 \G Z
-2 \G$char$char$char$char Z
-3 \G Z
-4 \G$char Z
-5 ˆÈ‰ºAÈ—ª
-
-‚‚܂èAƒOƒ[ƒoƒ‹ƒ}ƒbƒ`‚Å‚ÍAƒ}ƒbƒ`‚ªƒ[ƒ•¶Žš•‚Å‚È‚¢ƒpƒ^[ƒ“‚Ì‘O‚É‚Í\G($char*?)‚ðAƒ[ƒ•¶Žš•‚Å‚ ‚éƒpƒ^[ƒ“‚Ì‘O‚É‚Í\G(\A|$char+?)‚ð“ü‚ê‚é•K—v‚ª‚ ‚è‚Ü‚·B
-‚½‚¾‚µA‚±‚ê‚łೂµ‚­iHjƒ}ƒbƒ`‚³‚¹‚ç‚ê‚È‚¢ê‡‚ª‚ ‚è‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$str = "0123000123";
-
-print +($temp = $str) =~ s/0*/Z/g, $temp;
-
-print +($temp = $str) =~ s/\G($char*?)0*/${1}Z/g, $temp;
-
-print +($temp = $str) =~ s/\G(\A|$char+?)0*/${1}Z/g, $temp;
-__END__
- 9 ZZ1Z2Z3ZZ1Z2Z3Z
-14 ZZ1ZZ2ZZ3ZZ1ZZ2ZZ3ZZ
- 7 Z1Z2Z3Z1Z2Z3Z
-
-‚±‚ê‚ÍAƒpƒ^[ƒ“‚ªƒ[ƒ•¶Žš•‚Ƀ}ƒbƒ`‚·‚é‚à‚Ì‚Å‚ ‚é‚ÆA/g‚ª‚»‚Ìê‚Å–³ŒÀ‚É‘«“¥‚Ý‚µ‚ÄI—¹‚µ‚È‚­‚È‚é‚Ì‚ð–h‚®‚½‚ßAperl‚ÍAƒ}ƒbƒ`‚ð‹­§“I‚Éi‚ß‚Ä‚¢‚é‚Ì‚Å‚·‚ªicf. perlre, Repeated patterns matching zero-length substringjA‚±‚Ìi‚ß•û‚Ì^Ž—i‚µ‚©‚àƒoƒCƒg’PˆÊ‚Å‚Í‚È‚­A•¶Žš’PˆÊ‚Åi‚Þ‚à‚Ìj‚ªA\G($char*?)‚â\G(\A|$char+?)‚Å‚ÍA‚¤‚Ü‚­‚Å‚«‚È‚¢‚©‚ç‚Å‚·B‚à‚Á‚Æ‚à‚±‚¤‚¢‚¤ƒ}ƒbƒ`‚ð‚·‚é‚±‚Æ‚ÍA‚Ù‚Æ‚ñ‚Ç‚È‚¢‚Æl‚¦‚ç‚ê‚Ü‚·‚Ì‚ÅA‹C‚É‚·‚é•K—v‚Í‚È‚¢‚Ì‚©‚à’m‚ê‚Ü‚¹‚ñiƒ•‰‚¯É‚µ‚ÝjB
-ƒAƒ‹ƒtƒ@ƒxƒbƒg‚̑啶Žš‚Ƭ•¶Žš
-Shift-JIS‚Ì‚QƒoƒCƒg•¶Žš‚Ì’†‚É‚ÍA‘æ‚QƒoƒCƒg‚ªASCII‚ʼnpŽš‚É“–‚½‚é‚à‚Ì‚ª‚ ‚è‚Ü‚·B‚»‚Ì‚½‚ßAŠÖ” uc, lc ‚âAƒƒ^•¶Žš \U, \L‚ª‚QƒoƒCƒg•¶Žš‚̈ꕔ‚ð•ÏŠ·‚µ‚Ä‚µ‚Ü‚Á‚½‚èi‚µ‚©‚µŠÖ” ucfirst, lcfirst ‚â ƒƒ^•¶Žš \u, \l ‚Í–â‘è‚Æ‚È‚ç‚È‚¢jAm//i ‚â s///i‚È‚Ç‚Ì /iCüŽq‚É‚æ‚Á‚ĈႤ•¶Žš‚Ȃ̂Ƀ}ƒbƒ`‚µ‚Ä‚µ‚Ü‚Á‚½‚è‚·‚邱‚Æ‚ª‚ ‚è‚Ü‚·B
-Shift-JIS•¶Žš—ñ‚ÉŠÜ‚Ü‚ê‚éASCII‚̉pŽš‚ð‘啶Žš‚Ü‚½‚ͬ•¶Žš‚É‘µ‚¦‚½‚¢‚È‚çA—Ⴆ‚ÎAŽŸ‚̂悤‚ȃTƒuƒ‹[ƒ`ƒ“‚ðì‚ê‚ÎŽÀŒ»‚Å‚«‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
-lc("PERLƒvƒƒOƒ‰ƒ~ƒ“ƒO"); # 'perlƒvƒƒoƒ‰ƒ~ƒ“ƒo'
-tolower("PERLƒvƒƒOƒ‰ƒ~ƒ“ƒO"); # 'perlƒvƒƒOƒ‰ƒ~ƒ“ƒO'
-
-sub tolower {
- my $str = $_[0];
- $str =~ s/\G($char*?)([A-Z]+)/$1\L$2/g;
- $str;
-}
-
-sub toupper {
- my $str = $_[0];
- $str =~ s/\G($char*?)([a-z]+)/$1\U$2/g;
- $str;
-}
-
-ƒP[ƒX–³Ž‹‚̃}ƒbƒ` /i ‚ÌꇂÍA—Ⴆ‚Î 'ƒG'‚Ì‘æ“ñƒoƒCƒg‚Í 'G' ‚Å‚ ‚èA'ƒg'‚Ì‘æ“ñƒoƒCƒg‚Í 'g' ‚Å‚ ‚邱‚Æ‚©‚çA'ƒG' =~ /ƒg/i‚̓}ƒbƒ`‚µ‚Ü‚·B‚Å‚·‚©‚çAShift-JIS‚ųŠm‚ȃ}ƒbƒ`‚ð‚µ‚½‚¯‚ê‚ÎA/iCüŽq‚ÍŽg‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñB
-‚©‚í‚è‚ÉA•¶Žš—ñ‚ÉŠÜ‚Ü‚ê‚éƒAƒ‹ƒtƒ@ƒxƒbƒgi“ñƒoƒCƒg•¶Žš‚Ì‘æ‚QƒoƒCƒg‚É‚ ‚é‚à‚̂𜂭j‚𬕶Žši‚Ü‚½‚͑啶ŽšA‚Ç‚¿‚ç‚©j‚É“ˆê‚µ‚ă}ƒbƒ`‚³‚¹‚Ü‚·Btolower‚Ì’è‹`‚Íã‚ð‚²——‰º‚³‚¢B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
-$lcstr = tolower($str);
-$lckey = tolower(quotemeta $key);
-
-if ($lcstr =~ /^$char*?$lckey/) {
- print "matched";
-}
-else {
- print "not matched";
-}
-
-‚Ü‚½‚Í–„‚ßž‚ÝCüŽq (?ismx-ismx) ‚ð—p‚¢‚Ä‚àD‚¢Œ‹‰Ê‚𓾂ç‚ê‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-"‘æ‚P‰ñPerluk‚Ì‚²ˆÄ“à" =~ /^$char*?PERLuK/i # ƒ}ƒbƒ`‚·‚éi¢‚éj
-"‘æ‚Q‰ñPerluk‚Ì‚²ˆÄ“à" =~ /^$char*?((?i)PERL)uK/ # ƒ}ƒbƒ`‚µ‚È‚¢i—Ç‚µj
-"‘æ‚R‰ñPerluK‚Ì‚²ˆÄ“à" =~ /^$char*?((?i)PERL)uK/ # ƒ}ƒbƒ`‚·‚éi—Ç‚µj
-
-‘SŠp‚QƒoƒCƒgƒAƒ‹ƒtƒ@ƒxƒbƒg‚̃P[ƒX–³Ž‹‚ÍA‘I‘ð‚É‚æ‚èŽÀŒ»‚Å‚«‚Ü‚·i‚ªA‚â‚Á‚Ï‚è•ÏjB'‚`'‚Ì‘æ‚QƒoƒCƒg‚ª '`' ‚È‚Ì‚àA‚¿‚å‚Á‚Æ’ˆÓ‚Å‚·im`` ‚È‚Ç‚Ì‚Æ‚«’v–½“IƒGƒ‰[‚É‚È‚éB‚½‚¾‚µƒoƒbƒNƒNƒH[ƒg‚ðŽg‚¤ˆÓ–¡‚Í“Á‚É‚È‚¢jBŒ´‘¥“I‚ɂ̓Šƒeƒ‰ƒ‹‚ðƒ}ƒbƒ`‰‰ŽZŽq‚â’uŠ·‰‰ŽZŽq‚É’¼Ú–„‚ßž‚Þ‚Ì‚Í”ð‚¯‚½‚¢Š‚Å‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-/(?:‚o|‚)(?:‚d|‚…)(?:‚q|‚’)(?:‚k|‚Œ)/;
-
-‚»‚Ì‘ã‚í‚è‚É‚±‚ñ‚ȃTƒuƒ‹[ƒ`ƒ“‚ðì‚Á‚Ä‚Ý‚Ä‚à‚æ‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$CharRE = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
-$pat = make_regexp_ignorecase("‚o‚d‚q‚kuK");
-print "‘æ‚T‰ñ‚o‚…‚’‚ŒuK‰ï" =~ /^$char*?$pat/ ? "OK": "NOT";
-
-sub make_regexp_ignorecase {
- my $str = $_[0];
- $str =~ s/\G([A-Za-z]+|$CharRE)/
- my $c = ord $1;
- if($c == 0x82) {
- my $v = vec($1,1,8);
- 0x81 <= $v && $v <= 0x9A ? sprintf('\\x82[\\x%2x\\x%2x]', $v, $v-33) :
- 0x60 <= $v && $v <= 0x79 ? sprintf('\\x82[\\x%2x\\x%2x]', $v, $v+33) :
- quotemeta($1);
- }
- elsif(0x41 <= $c && $c <= 0x5A || 0x61 <= $c && $c <= 0x7A) {"(?:(?i)$1)"}
- else {quotemeta($1)}
- /geo;
- $str;
-}
-
-’·‚¢•¶Žš—ñ‚ɑ΂·‚鳋K•\Œ»ŒŸõ
-³‹K•\Œ»‚ÍAPerl ‚É‚Æ‚Á‚ÄŒ‡‚©‚¹‚È‚¢‘¶Ý‚Æ‚¢‚¦‚Ü‚·B‚µ‚©‚µ³‹K•\Œ»‚̧ŒÀ‚Æ‚µ‚ÄA*, +, {min,max} ‚È‚Ç‚Ì—ÊŽw’èŽq‚ªƒ}ƒbƒ`‚ðŒJ‚è•Ô‚¹‚é‰ñ”‚ÌãŒÀ‚Æ‚¢‚¤–â‘肪‚ ‚è‚Ü‚·B(Ú×‚Í perlre ŽQÆ‚Ì‚±‚Æ)B‚»‚Ì‚½‚ßA$char*? ‚Æ‚¢‚¤³‹K•\Œ»‚É‚ÍAŠëŒ¯«‚ª‚ ‚è‚Ü‚·B
-—Ⴆ‚ÎAŽŸ‚̂悤‚ȃ}ƒbƒ`ƒ“ƒO‚ðl‚¦‚ÄŒ©‚Ü‚µ‚傤B$str‚ÍAu‚ v‚ª10–œŽš˜A‘±‚µ‚½‚ ‚Æ‚ÉAuƒAƒCABCv‚ª˜AŒ‹‚³‚ꂽ•¶Žš—ñ‚Å‚·B‚±‚̂悤‚È•¶Žš—ñi‚½‚¾‚µAuw‚ x‚ª10–œŽš˜A‘±v‚Æ‚¢‚¤‚±‚Æ‚Í•ª‚©‚炸A”CˆÓ‚Ì Shift-JIS ƒeƒLƒXƒg‚Å‚ ‚낤‚Æ‚¢‚¤‚±‚Æ‚É‚µ‚Ü‚·j‚©‚çA”¼ŠpƒAƒ‹ƒtƒ@ƒxƒbƒg‚ª˜A‘±‚µ‚½•”•ª‚ðŒ©‚Â‚¯‚½‚¢‚Æ‚µ‚Ü‚µ‚傤B‚·‚é‚ÆA¡‚Ü‚Å‚Ìl‚¦•û‚©‚ç‚·‚é‚ÆAŽŸ‚̂悤‚É‚·‚ê‚΂悢‚ÆŽv‚í‚ê‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-my $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-my $str = ('‚ ' x 100000) . 'ƒAƒCABC';
-$str =~ /^$char*?([A-Z]+)/o;
-print $1;
-
-‚µ‚©‚µA‚±‚ê‚ÍAŠÂ‹«‚É‚æ‚Á‚Ä‚ÍA‘å‚«‚ȃGƒ‰[‚ðˆø‚«‹N‚±‚µ‚Ü‚·B—Ⴆ‚ÎAWindows 98ã‚Å Active Perl 522 ‚ð—p‚¢‚½ê‡AError: Runtime exception ‚Æ‚¢‚¤ Perl ‚̃Gƒ‰[‚É‚È‚è‚Ü‚µ‚½B‚Ü‚½AWindows 98ã‚ÅVC++ 6.0‚ŃRƒ“ƒpƒCƒ‹‚³‚ꂽ Perl 5.6.1 ‚¾‚ÆAu‚±‚̃vƒƒOƒ‰ƒ€‚Í•s³‚Ȉ—‚ðs‚Á‚½‚Ì‚Å‹­§I—¹‚³‚ê‚Ü‚·B`v‚È‚Ç‚Æ‚¢‚Á‚½ƒGƒ‰[‚É‚È‚è‚Ü‚µ‚½B
-‚±‚̂悤‚È–â‘è‚ð‚Å‚«‚邾‚¯–h‚®‚½‚ß‚É‚ÍAŽŸ‚̂悤‚É‚µ‚Ü‚·B‚‚܂èA•¶Žš—ñ‚Ì擪‚©‚ç’²‚ׂĂ¢‚­ê‡A“ñƒoƒCƒg•¶Žš‚Ì•¶Žš‹«ŠE‚ðŠÔˆá‚¦‚é‚Ì‚ÍA“ñƒoƒCƒg•¶Žš‚Ì‘æˆêƒoƒCƒg‚Ì’¼Œã‚𕶎š‹«ŠE‚ÆŒë”FŽ¯‚µ‚½Žž‚¾‚¯‚Å‚·BShift-JIS‚Å‚ÍA“ñƒoƒCƒg•¶Žš‚Ì‘æˆêƒoƒCƒg‚ÍA[\x81-\x9F\xE0-\xFC] ‚¾‚¯‚Å‚·B‚ ‚é‚¢‚ÍAEUC-JP ‚É•ÏŠ·‰Â”\‚ȗ̈悾‚¯‚ðl—¶‚·‚ê‚ÎA[\x81-\x9F\xE0-\xEF] ‚¾‚¯‚Æ‚¢‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚êˆÈŠO‚̃oƒCƒg‚Ì’¼Œã‚ÍA—Ⴆ‚ÎA0x41 ‚Ì’¼Œã‚ÍA'A' ‚Ì’¼Œã‚©A'ƒA' ‚Ì’¼Œã‚©‚Í•ª‚©‚è‚Ü‚¹‚ñ‚ªAŠm‚©‚É•¶Žš‹«ŠE‚É‚È‚è‚Ü‚·B]‚Á‚ÄA[\x81-\x9F\xE0-\xFC]+ i‚Ü‚½‚Í [\x81-\x9F\xE0-\xEF]+ j‚̃oƒCƒgi“ñƒoƒCƒg•¶Žšj‚ª˜A‘±‚·‚é‚Æ‚±‚낾‚¯‚É’ˆÓ‚·‚ê‚΂悢‚±‚Æ‚É‚È‚è‚Ü‚·B
-‚±‚Ì‚½‚ßAˆÈ‰º‚̂悤‚ÉA^$char*? ‚Ì‘ã‚í‚è‚É $Apad ‚ðŽg‚¢A\G$char*? ‚Ì‘ã‚í‚è‚É $Gpad ‚ð—p‚¢‚ê‚ÎAˆêƒoƒCƒg•¶Žš‚©A“ñƒoƒCƒg•¶Žš‚Ì‚¤‚¿‘æ“ñƒoƒCƒg‚ª [\x40-\x7E\x80\xA0-\xDF] ‚ÅI‚í‚é‚à‚Ì‚ªA­‚È‚­‚Æ‚à“K“–‚ÈŠÔŠu‚ÅiãŒÀ‚É’B‚µ‚È‚¢‚¤‚¿‚ÉjoŒ»‚·‚ê‚ÎAƒGƒ‰[‚ɂȂ炸‚Ɉ—‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·BiŠm—¦“I‚È–â‘è‚Å‚·‚Ì‚ÅAŠ®‘S‚Å‚Í‚ ‚è‚Ü‚¹‚ñBj
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-# ˆê‰ñ‚¾‚¯ƒ}ƒbƒ`
-my $Apad = '(?:(?:\A|[\x00-\x80\xA0-\xDF])(?:[\x81-\x9F\xE0-\xFC]{2})*?)';
-my $str1 = ('‚ ' x 100000) . 'ƒAƒCABC';
-$str1 =~ /$Apad([A-Z]+)/o;
-print "$1\n"; # "ABC" ‚Æ•\Ž¦‚³‚ê‚éB
-
-# ƒOƒ[ƒoƒ‹ƒ}ƒbƒ`
-my $Gpad = '(?:(?:\G|[\x00-\x80\xA0-\xDF])(?:[\x81-\x9F\xE0-\xFC]{2})*?)';
-
-my $str2 = '‚ ' x 100000 . 'ƒAƒCABC'. '‚¨' x 100000 . 'XYZ';
-my @array = $str2 =~ /$Gpad([A-Z]+)/go;
-print "@array\n"; # "ABC XYZ" ‚Æ•\Ž¦‚³‚ê‚éB
-
-ŠOŽš‚Ì•ÏŠ·
-ƒxƒ“ƒ_’è‹`•¶Žš‚⃆[ƒU’è‹`•¶Žš‚ðŠÜ‚Þ•¶Žš—ñ‚𑼂̊‹«‚Å‚à—˜—p‚Å‚«‚é‚悤‚É‚·‚é‚É‚ÍA“KØ‚È•ÏŠ·‚ª•K—v‚Å‚·i–³˜_A‚Ü‚Á‚½‚­“¯‚¶Žš‘Ì‚Ì—˜—p‚Í‚Ù‚Æ‚ñ‚Ç–]‚ß‚¸A‚¨‚»‚ç‚­‚Í—ÞŽ—‚µ‚½•¶Žš‚╶Žš—ñ‚É•ÏŠ·‚·‚邱‚Æ‚É‚È‚é‚Å‚µ‚傤jB‚±‚ê‚ÍPerl‚Å‚Í’uŠ·‰‰ŽZŽq s/// ‚ðŽg‚¦‚ΔäŠr“I—eˆÕ‚ÉŽÀŒ»‚Å‚«‚Ü‚·B
-‚ ‚ç‚©‚¶‚ßA‚Ç‚ÌŠOŽš‚ð‚Ç‚¤•ÏŠ·‚·‚é‚©‚ð’è‹`‚·‚é•ÏŠ·ƒe[ƒuƒ‹‚ð—pˆÓ‚µ‚È‚­‚Ä‚Í‚È‚è‚Ü‚¹‚ñB‚±‚ê‚ÍPerl‚ł̓nƒbƒVƒ…‚É‚µ‚Ä‚¨‚­‚Æ‚»‚ÌŒã‚̈—‚ªŠy‚É‚È‚è‚Ü‚·B‚±‚±‚Å‚ÍA'w932_gai.txt'‚Å’è‹`‚·‚éAWindows codepage-932ƒR[ƒh‚ÉŠî‚¢‚½‹@ŽíˆË‘¶•¶Žš‚Ìi•”•ª“Ij•ÏŠ·ƒe[ƒuƒ‹‚ðŽg‚¤‚±‚Æ‚É‚µ‚Ü‚·B
-ŽŸ‚̃R[ƒh‚Å‚ÍA‚P•¶Žš‚ƒ}ƒbƒ`‚³‚¹A‚»‚Ì•¶Žš‚ª•ÏŠ·ƒnƒbƒVƒ…‚̃L[‚É‚ ‚ê‚ΑΉž‚·‚é’l‚Ì•¶Žš—ñ‚É’uŠ·‚µA‚»‚¤‚Å‚È‚¯‚ê‚΂»‚Ì‚Ü‚ÜŽc‚µ‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-require 'w932_gai.txt'; # %table‚Ì’è‹`i•sŠ®‘SIj
-
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
-$str =~ s/($char)/exists $table{$1} ? $table{$1} : $1/geo;
-
-“¯—l‚Ȉ—‚ÍA‚‚¬‚̂悤‚È‘‚«•û‚Å‚à‚Å‚«‚Ü‚·‚ªAŠOŽš‚Ƀ}ƒbƒ`‚·‚鳋K•\Œ» $gaiji‚ð—pˆÓ‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚¸‚ꂽƒ}ƒbƒ`‚ð‚µ‚È‚¢‚½‚ß‚ÉA‚±‚¿‚ç‚̳‹K•\Œ»‚É‚Í \G ‚ª•K—v‚Å‚·B—Ⴆ‚ÎA$str = '‡@';‚ÌŒã‚ë‚QƒoƒCƒg‚Í "\x87\x40" ‚Å‚·‚ªA‚±‚¤‚·‚ê‚΃}ƒbƒ`‚ª‚¸‚ê‚éS”z‚ª‚ ‚è‚Ü‚¹‚ñB‚Ü‚½A”ñ—~’£‚èƒ}ƒbƒ` ($char*?)‚ðŽg‚¦‚Î $char ‚ªŠOŽš‚Ƀ}ƒbƒ`‚µ‚È‚¢‚悤•ÏX‚·‚é•K—v‚Í‚ ‚è‚Ü‚¹‚ñB
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-require 'w932_gai.txt'; # %table‚Ì’è‹`i•sŠ®‘SIj
-
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-$gaiji = '(?:[\x87][\x40-\x9c])';
-
-$str =~ s/\G($char*?)($gaiji)/$1$table{$2}/g;
-
-CP932d•¡’è‹`•¶Žš‚Ì•ÏŠ·
-Microsoft Windows “ú–{Œê”łňê”Ê“I‚ÉŽg—p‚³‚ê‚Ä‚¢‚éƒR[ƒhƒy[ƒW 932 (CP932) ‚Å‚ÍAŠô‚‚©‚Ì•¶Žš‚ªd•¡‚µ‚Ä’è‹`‚³‚ꂽó‘Ô‚É‚È‚Á‚Ä‚¢‚Ü‚·B‚±‚±‚ÅA•¶Žš‚ªd•¡’è‹`‚³‚ê‚Ä‚¢‚é‚Æ‚ÍAUnicode‚Ì“¯‚¶•„†ˆÊ’u‚ɑΉž•t‚¯‚ç‚ê‚Ä‚¢‚邱‚Æ‚Æ‚µ‚Ü‚·B
-—Ⴆ‚ÎACP932 -> Unicode -> CP932 ‚̇‚Å•ÏŠ·‚³‚ê‚é‚ÆAd•¡’è‹`•¶Žš‚ÍA‚Ç‚ê‚©ˆê‚‚ɑµ‚¦‚ç‚ê‚Ü‚·B‚±‚Ì—Dæ‡ˆÊ‚Í JIS X 0208, NEC“ÁŽê•¶Žš (13‹æ)AIBMŠg’£•¶Žš (115`119‹æ)ANEC‘I’èIBMŠg’£•¶Žš (89`92‹æ) ‚̇‚Å‚·Bˆê—á‚Æ‚µ‚ÄA'æ' ‚Ìê‡ANEC“ÁŽê•¶Žš‚Ì "\x87\x9A" ‚â IBMŠg’£•¶Žš‚Ì "\xFA\x5B" ‚ÍAJIS X 0208 ‚Ì "\x81\xE6" ‚É‚È‚è‚Ü‚·B
-‚µ‚©‚µACP-932 ‚̃eƒLƒXƒg’†Ad•¡’è‹`•¶Žš‚ª‚Ç‚ê‚©‚É‘µ‚Á‚Ä‚¢‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·B—Ⴆ‚Î "\x87\x9A" ‚â "\xFA\x5B" ‚ªŠÜ‚Ü‚ê‚Ä‚¢‚é‚ÆAƒeƒLƒXƒg‚ð–Ú‚ÅŒ©‚é‚ƈႢ‚ª‚È‚¢‚Ì‚ÉA"\x81\xE6" ‚ÅŒŸõ‚µ‚Ä‚àŒ©‚‚¯‚ç‚ê‚È‚¢‚±‚Æ‚É‚È‚è‚Ü‚·B
-d•¡’è‹`•¶Žš‚𑵂¦‚郂ƒWƒ…[ƒ‹‚Æ‚µ‚ÄAShiftJIS/CP932/Correct.pm ‚ª‚ ‚è‚Ü‚·B“üŽè‚ÆŽg‚¢•û‚ÍPerl‚̃y[ƒW‚É–ß‚ê‚ÎŒ©‚‚©‚è‚Ü‚·B
-‚Ü‚½AShiftJIS/String.pm ‚Ì strtr() ‚Ü‚½‚Í trclosure() ‚ðŽg‚¤•û–@‚à‚ ‚è‚Ü‚·B“üŽè‚ÆŽg‚¢•û‚ÍPerl‚̃y[ƒW‚É–ß‚ê‚ÎŒ©‚‚©‚è‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-
-# (1) $necJIS -> $jisNEC (9‘Î)
- $necJIS = "\x87\x90\x87\x91\x87\x92\x87\x95\x87\x96\x87\x97\x87\x9A\x87\x9B\x87\x9C";
- # NEC“ÁŽê•¶Žš‚Ì‚¤‚¿AJIS•¶Žš‚É•ÏŠ·‚³‚ê‚é‚ׂ«”ñŠ¿Žš
- $jisNEC = "\x81\xE0\x81\xDF\x81\xE7\x81\xE3\x81\xDB\x81\xDA\x81\xE6\x81\xBF\x81\xBE";
- # JIS•¶Žš‚Ì‚¤‚¿ANEC“ÁŽê•¶Žš‚Éd•¡’è‹`‚³‚ê‚Ä‚¢‚é”ñŠ¿Žš
-
-# (2) $necibmJIS -> $jisNECIBM (1‘Î)
- $necibmJIS = "\xEE\xF9";
- # NEC‘I’èIBMŠg’£•¶Žš‚Ì‚¤‚¿AJIS•¶Žš‚É•ÏŠ·‚³‚ê‚é‚ׂ«”ñŠ¿Žš
- $jisNECIBM = "\x81\xCA";
- # JIS•¶Žš‚Ì‚¤‚¿ANEC‘I’èIBMŠg’£•¶Žš‚Éd•¡’è‹`‚³‚ê‚Ä‚¢‚é”ñŠ¿Žš
-
-# (3) $ibmJIS -> $jisIBM (2‘Î)
- $ibmJIS = "\xFA\x54\xFA\x5B";
- # IBMŠg’£•¶Žš‚Ì‚¤‚¿AJIS•¶Žš‚É•ÏŠ·‚³‚ê‚é‚ׂ«”ñŠ¿Žš
- $jisIBM = "\x81\xCA\x81\xE6";
- # JIS•¶Žš‚Ì‚¤‚¿AIBMŠg’£•¶Žš‚Éd•¡’è‹`‚³‚ê‚Ä‚¢‚é”ñŠ¿Žš
-
-# (4) $ibmNEC -> $necIBM (13‘Î)
- $ibmNEC = "\xFA\x4A-\xFA\x53\xFA\x58\xFA\x59\xFA\x5A";
- # IBMŠg’£•¶Žš‚Ì‚¤‚¿ANEC“ÁŽê•¶Žš‚É•ÏŠ·‚³‚ê‚é‚ׂ«”ñŠ¿Žš
- $necIBM = "\x87\x54-\x87\x5D\x87\x8A\x87\x82\x87\x84";
- # NEC“ÁŽê•¶Žš‚Ì‚¤‚¿AIBMŠg’£•¶Žš‚Éd•¡’è‹`‚³‚ê‚Ä‚¢‚é”ñŠ¿Žš
-
-# (5) $necibmIBM -> $ibmNECIBM (13‘Î)
- $necibmIBM = "\xEE\xEF-\xEE\xF8\xEE\xFA\xEE\xFB\xEE\xFC";
- # NEC‘I’èIBMŠg’£•¶Žš‚Ì‚¤‚¿AIBMŠg’£•¶Žš‚É•ÏŠ·‚³‚ê‚é‚ׂ«”ñŠ¿Žš
- $ibmNECIBM = "\xFA\x40-\xFA\x49\xFA\x55\xFA\x56\xFA\x57";
- # IBMŠg’£•¶Žš‚Ì‚¤‚¿ANEC‘I’èIBMŠg’£•¶Žš‚Éd•¡’è‹`‚³‚ê‚Ä‚¢‚é”ñŠ¿Žš
-
-# (6) $necibmCJK -> $ibmCJK (360‘Î)
- $necibmCJK = "\xED\x40-\xEE\xEC";
- # NEC‘I’èIBMŠg’£•¶Žš’†‚ÌŠ¿Žš
- $ibmCJK = "\xFA\x5C-\xFC\x4B";
- # IBMŠg’£•¶Žš’†‚ÌŠ¿Žš
-
-use ShiftJIS::String qw(trclosure);
-
-# •ÏŠ·—pƒNƒ[ƒWƒƒ‚̶¬
-$correctCP932 = trclosure(
- $necJIS.$necibmJIS.$ibmJIS.$ibmNEC.$necibmIBM.$necibmCJK, # from
- $jisNEC.$jisNECIBM.$jisIBM.$necIBM.$ibmNECIBM.$ibmCJK # to
-);
-
-$result = $correctCP932->($source); # $source ‚ð•ÏŠ·‚µ‚Ä $result ‚𓾂é
-
-•¶Žš”‚𔂦‚é
-Shift-JIS•¶Žš—ñ‚Ì•¶Žš”‚𔂦‚é‚É‚ÍAƒ}ƒbƒ`‰‰ŽZŽq‚ð—˜—p‚·‚é‚È‚çƒXƒJƒ‰[ƒRƒ“ƒeƒLƒXƒg‚Å”‚¦‚½•û‚ªŽáŠ±‘¬‚©‚Á‚½‚Å‚·B‚»‚ê‚æ‚èA’uŠ·‰‰ŽZŽq‚ð—˜—p‚µ‚½‚Ù‚¤‚ª‘¬‚­‘‚¯‚é‚Æ‚í‚©‚è‚Ü‚µ‚½B
-‚à‚Á‚Æ‚àXS‚Å‘‚¢‚½‚Ù‚¤‚ª‚¸‚Á‚Æ‘¬‚©‚Á‚½‚Å‚·B‚Ü‚ AXSUB‚Í–³—‚É—˜—p‚µ‚È‚­‚Ä‚à‚æ‚¢‚Å‚µ‚傤B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-use Benchmark;
-
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-$s = "Š¿Žš‚ \0A±CƒeƒXƒg -";
-
-timethese (100000, {
- le => q{
- ($str = $s) =~ s/$char/0/go;
- $le = length $str;
- },
- sg => q{
- $sg = ($str = $s) =~ s/$char//go;
- },
- ab => q{
- $ab = 0;
- $ab++ while $s =~ /[^\x81-\x9F\xE0-\xFC]|../g;
- },
- ar => q{
- $ar = @{[ $s =~ /$char/go ]};
- },
- gr => q{
- $gr = grep defined, $s =~ /$char/go;
- },
- wh => q{
- $wh = 0;
- $wh++ while $s =~ /$char/go;
- },
- sj => q{
- $sj = sjslen($s);
- },
- xs => q{
- $xs = sjlength($s);
- },
-});
-
-sub sjslen {
- my($str,$len,$i,$c,$blen);
- $str = shift;
- $blen = length $str;
- while ($i < $blen) {
- $c = vec($str, $i, 8);
- if (0x81 <= $c && $c <= 0x9F || 0xE0 <= $c && $c <= 0xFC){ $i++ }
- $i++,$len++;
- }
- $len;
-}
-
-Œ‹‰Ê
-Benchmark: timing 100000 iterations of ab, ar, gr, le, sg, sj, wh, xs...
- ab: 4 wallclock secs ( 3.46 usr + 0.00 sys = 3.46 CPU) @ 28901.73/s
- ar: 6 wallclock secs ( 5.98 usr + 0.00 sys = 5.98 CPU) @ 16722.41/s
- gr: 6 wallclock secs ( 5.50 usr + 0.00 sys = 5.50 CPU) @ 18181.82/s
- le: 3 wallclock secs ( 2.09 usr + 0.00 sys = 2.09 CPU) @ 47846.89/s
- sg: 2 wallclock secs ( 1.92 usr + 0.00 sys = 1.92 CPU) @ 52083.33/s
- sj: 9 wallclock secs ( 8.57 usr + 0.00 sys = 8.57 CPU) @ 11668.61/s
- wh: 5 wallclock secs ( 4.78 usr + 0.00 sys = 4.78 CPU) @ 20920.50/s
- xs: 1 wallclock secs ( 0.38 usr + 0.00 sys = 0.38 CPU) @ 263157.89/s
- (warning: too few iterations for a reliable count)
-
-XSUB
-int
-sjlength(arg)
- SV* arg
- PROTOTYPE: $
- PREINIT:
- unsigned char *str, *p, *e;
- STRLEN byte, len = 0;
- CODE:
- p = str = (unsigned char *)SvPV(arg, byte);
- e = str + byte;
- while (p < e) {
- if (0x81 <= *p && *p <= 0x9F || 0xE0 <= *p && *p <= 0xFC)
- ++p;
- ++p, ++len;
- }
- RETVAL = len;
- OUTPUT:
- RETVAL
-
-•¶Žš’PˆÊ‚É•ª‚¯‚é
-Shift-JIS•¶Žš—ñ‚𕶎š’PˆÊ‚É•ªŠ„‚µ‚Ü‚µ‚傤B‚±‚ÌꇂÍAXS‚ð—˜—p‚µ‚Ä‚à‚ ‚܂葬‚­‚È‚è‚Ü‚¹‚ñ‚Å‚µ‚½B•Ô‚è’l‚̃ŠƒXƒg‚ð—pˆÓ‚·‚é‚Ì‚ÉŽžŠÔ‚ªŽæ‚ç‚ê‚é‚Ì‚©A‚â‚Í‚èPerl‚̳‹K•\Œ»‚̈—‚Í‚©‚Ȃ葬‚¢‚à‚Ì‚¾‚Æ‚¢‚¤‚±‚Æ‚Å‚µ‚傤B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-use Benchmark;
-
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-$s = "“ú–{ŒêÆÎݺÞ\0ABC" x 100;
-
-timethese (1000, {
- re => q{
- @re = $s =~ /$char/go;
- },
- xs => q{
- @xs = sjsplit($s);
- },
-});
-
-Œ‹‰Ê
-Benchmark: timing 1000 iterations of re, xs...
- re: 7 wallclock secs ( 6.65 usr + 0.00 sys = 6.65 CPU) @ 150.38/s
- xs: 6 wallclock secs ( 5.33 usr + 0.00 sys = 5.33 CPU) @ 187.62/s
-
-XSUB
-void
-sjsplit(arg)
- SV* arg
- PROTOTYPE: $
- PREINIT:
- unsigned char *str, *p, *e;
- STRLEN ch, byte, len = 0;
- PPCODE:
- str = (unsigned char *)SvPV(arg,byte);
- e = str + byte;
- for (p = str; p < e; p++) {
- if (0x81 <= *p && *p <= 0x9F || 0xE0 <= *p && *p <= 0xFC) ++p;
- ++len;
- }
- EXTEND(SP,len);
- for (p = str; p < e; p += ch) {
- ch = (0x81 <= *p && *p <= 0x9F || 0xE0 < *p && *p <= 0xFC) ? 2 : 1;
- PUSHs(sv_2mortal(newSVpv(p,ch)));
- }
-
-FX‚È•ªŠ„
-•¶Žš‚Å•ªŠ„‚Å‚Ý‚½‚悤‚ÉA•¶Žš—ñ‚𕪊„‚·‚é‚É‚ÍAm//g‚ª•Ö—˜‚Å‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$onebyte = '[\x00-\x7F\xA1-\xDF]';
-$twobyte = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
-#‚PƒoƒCƒg•¶Žš‚̉ò‚Æ‚QƒoƒCƒg•¶Žš‚̉ò‚É•ª‚¯‚éB
- while ($str =~ /\G($onebyte*)($twobyte*)/g) {
- push @one, $1 if $1 ne '';
- push @two, $2 if $2 ne '';
- }
-
-#‹å“_‚ªÅŒã‚Ì•¶Žš‚Æ‚È‚é‚悤‚É•ªŠ„‚·‚éB
-# 'B' ‚Å‚Í‚¢‚¢‚ªA•¶Žš‚É‚æ‚Á‚Ä‚Í’ˆÓ‚ª•K—vB
- @sentences = $str =~ /\G$char*?(?:B|D|$)/g;
-
-“Á’è‚Ì’·‚³‚ÅØ‚è‚»‚낦‚é
-’·‚¢•¶Žš—ñ‚ð“Á’è‚Ì’·‚³iƒoƒCƒg’·j‚ÅØ‚è‚»‚낦‚é‚È‚çAŽŸ‚̂悤‚É‚µ‚Ä‚Å‚«‚Ü‚·B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
-$str = '‚í‚´‚í‚´EUC-JP‚É•ÏŠ·‚µ‚È‚¢‚ÅAShift-JIS‚̂܂܈—'.
- '‚Å‚«‚½‚ç‚¢‚¢‚ñ‚¾‚¯‚ÇA‚È‚©‚È‚©–Ê“|‚¾‚Ë‚¦B';
-
-print join "\n", bytebreak($str,15);
-
-sub bytebreak{
- my($byte,$bmax,$ch,@lines);
- my $str = shift;
- $byte = $bmax = shift;
- foreach $ch ($str =~ /$char/go) {
- $byte += length $ch; # ŽŸ‚Ì•¶Žš‚ðŒp‚¬‘«‚µ‚½’·‚³
- if ($byte <= $bmax) {
- $lines[-1] .= $ch; # ’·‚·‚¬‚È‚¯‚ê‚ÎŒp‚¬‘«‚·
- } else {
- $byte = length $ch;
- push @lines, $ch; # ‚³‚à‚È‚¯‚ê‚ÎŽŸ‚Ìs‚Ö
- }
- }
- return @lines;
- # ’·‚³‚ª‘«‚ç‚È‚¢ê‡‚ÉA‰E‚ðƒXƒy[ƒX‚Å–„‚ß‚½‚¯‚ê‚ÎB
- # return map {$_ .= ' ' x ($bmax - length)} @lines;
-}
-
-‹Ö‘¥ˆ—‚ÍA—Ⴆ‚ÎŽŸ‚̂悤‚É‚µ‚Äs‚¢‚Ü‚·B’Pƒ‚Èl‚¦•û‚Å‚ÍA‹Ö‘¥ˆ—‚ÍA(i) s“ª‹Ö‘¥•¶Žš‚Ì’¼‘O‚ʼnüs‚µ‚È‚¢G(ii) s––‹Ö‘¥•¶Žš‚Ì’¼Œã‚ʼnüs‚µ‚È‚¢G‚Æ‚¢‚¤‚±‚Æ‚É‚È‚è‚Ü‚·B‚Ü‚½A"(a)"‚̂悤‚ÉAs––‹Ö‘¥•¶Žš‚Æs“ª‹Ö‘¥•¶Žš‚ÌŠÔ‚É‚P•¶Žš‚µ‚©‚È‚¢˜A‘±‚µ‚½•”•ª‚ÍA‚»‚Ì•”•ª‚Ì‘S‘Ì‚ª–³‰üs‚É‚È‚é“_‚É‚à”z—¶‚µ‚Ü‚·B
-‚±‚Ì—á‚Å‚Í•¶Žš—ñ‚Ì’·‚³‚ðƒoƒCƒg’· length ‚Å‹K’肵‚Ä‚¢‚Ü‚·‚ªA•¶Žš•‚ƃoƒCƒg”‚Í•K‚¸‚µ‚à”ä—Ⴕ‚Ü‚¹‚ñ‚Ì‚ÅAꇂɂæ‚Á‚Ä‚ÍiƒMƒŠƒVƒA•¶Žš‚Í”¼Šp•‚É‚µ‚½‚¢‚Æ‚©A‚Ü‚½‚̓vƒƒ|[ƒVƒ‡ƒiƒ‹‚ÌꇂƂ©AUTF-8‚ÌꇂƂ©j•¶Žš•‚ð•Ô‚· width ‚̂悤‚ÈŠÖ”‚ð’è‹`‚·‚é•K—v‚ª‚ ‚é‚Å‚µ‚傤B
-‚Ü‚½A‚±‚Ì—á‚Ì‚â‚è•û‚Å‚ÍA‹Ö‘¥‚É‚æ‚é–³‰üs•”•ª‚¾‚¯‚ňês‚æ‚è’·‚­‚È‚éꇂÍA‚Í‚Ý‚¾‚µ‚ð–h‚°‚Ü‚¹‚ñB‚»‚ꂪ¢‚é‚È‚çA‹Ö‘¥‚Ì—áŠO‚Æ‚µ‚Äs‚𕪂¯‚éi—Ⴆ‚Î$next‚Ì’·‚³‚ª$bmax‚ð’´‚¦‚È‚¢‚悤‚É‚·‚éjˆ’u‚ª•K—v‚Å‚µ‚傤B
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-$CharRE = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])';
-
-# s“ª‹Ö‘¥•¶Žšiˆê•”•ªj
-$NotAtBegin = q/)]}fhvxjnp!,.:;?ABXJKICDFGH/;
-# s––‹Ö‘¥•¶Žšiˆê•”•ªj
-$NotAtEnd = q/([{eguwimo/;
-
-# ƒnƒbƒVƒ…‚ðì‚é
-@NotAtBegin{$NotAtBegin =~ m/$CharRE/g} = ();
-@NotAtEnd{ $NotAtEnd =~ m/$CharRE/g} = ();
-
-$Str = '‚í‚´‚í‚´EUC-JP‚É•ÏŠ·‚µ‚È‚¢‚ÅAShift-JIS‚̂܂܈—'.
- '‚Å‚«‚½‚ç‚¢‚¢‚ñ‚¾‚¯‚ÇA‚È‚©‚È‚©–Ê“|‚¾‚Ë‚¦B';
-
-print join "\n", linebreak($Str,16);
-
-sub linebreak{
- my($byte,$i,@chars,$next,@lines);
- my($str, $bmax, $pad) = @_;
-
- # $byte‚ÍŽŸ‚Ì•¶Žš‚ðŒp‚¬‘«‚µ‚½‚Æ‚«‚Ì’·‚³
- $byte = $bmax; # ‚·‚®‰üs‚Å‚«‚邽‚߂̉Šú’lB
-
- # •¶Žš’PˆÊ‚ɂ΂炷
- @chars = $str =~ /$CharRE/go;
-
- for ($i=0; $i<@chars; $i++) {
- $next .= $chars[$i]; # ŽŸ‚Ì•¶Žš
- $byte += length $chars[$i]; # ŽŸ‚Ì•¶Žš‚ðŒp‚¬‘«‚µ‚½’·‚³
-
- # ŽŸ‚Ì•¶Žš‚ªs––‹Ö‘¥‚Ì‚Æ‚«
- next if $i+1 < @chars && exists $NotAtEnd{ $chars[$i] };
- # ŽŸ‚Ì•¶Žš‚ÌŽŸ‚ªs“ª‹Ö‘¥‚Ì‚Æ‚«
- next if $i+1 < @chars && exists $NotAtBegin{ $chars[$i+1] };
-
- # s‚ÌU‚蕪‚¯
- # ’·‚·‚¬‚È‚¯‚ê‚ÎŒp‚¬‘«‚·
- if ($byte <= $bmax) {
- $lines[-1] .= $next;
- }
- # ‚³‚à‚È‚¯‚ê‚ÎŽŸ‚Ìs‚Ö
- else {
- push @lines, $next;
- $byte = length $next;# V‚µ‚¢s‚Ì’·‚³
- }
- $next = '';
- }
- return defined $pad && 1 == length $pad # ‹l‚ß•¨
- ? map {$_ .= $pad x ($bmax - length)} @lines
- : @lines;
-}
-
-‚Ԃ牺‚ª‚è‹Ö‘¥‚Ìê‡i$bmin ‚©‚ç $bmax‚Ì”ÍˆÍ‚ð‹–‚·jB
- $bmin = $bmax - 2; # —Ⴆ‚ÎB
-
- # s‚ÌU‚蕪‚¯
- # ’·‚·‚¬‚È‚¯‚ê‚ÎŒp‚¬‘«‚·
- if ($byte <= $bmax && @lines && length $lines[-1] < $bmin){
- $lines[-1] .= $next;
- }
- # ‚³‚à‚È‚¯‚ê‚ÎŽŸ‚Ìs‚Ö
- else {
- push @lines, $next;
- $byte = length $next;# V‚µ‚¢s‚Ì’·‚³
- }
-
-“ú–{Œê•¶Žš—ñ‚ð•À‚Ñ‘Ö‚¦‚é
-‰¼–¼•¶Žš—ñ‚ðŒÜ\‰¹‡‚Ƀ\[ƒg‚·‚郂ƒWƒ…[ƒ‹‚Æ‚µ‚ÄAShiftJIS/Collate.pm ‚ª‚ ‚è‚Ü‚·B“üŽè‚ÆŽg‚¢•û‚ÍPerl‚̃y[ƒW‚É–ß‚ê‚ÎŒ©‚‚©‚è‚Ü‚·B
-u“Ç‚ÝE•\‹LƇv‚ÍŽŸ‚̂悤‚É‚µ‚Äs‚¢‚Ü‚·BsortYomiƒƒ\ƒbƒh‚̎󂯎æ‚郊ƒXƒg‚ÌŠe—v‘f‚ÍA[ •\‹L—ñ, “Ç‚Ý—ñ ]‚Æ‚¢‚¤”z—ñƒŠƒtƒ@ƒŒƒ“ƒX‚Å‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-use ShiftJIS::Collate;
-
-my @data = (
- [qw/ ¬ŽR ‚±‚â‚Ü /],
- [qw/ ’·“c ‚È‚ª‚½ /],
- [qw/ “c’† ‚½‚È‚© /],
- [qw/ —é–Ø ‚·‚¸‚« /],
- [qw/ ¬“ˆ ‚±‚¶‚Ü /],
- [qw/ Ž™“‡ ‚±‚¶‚Ü /],
- [qw/ ¬ŽR ‚¨‚â‚Ü /],
- [qw/ ¬“‡ ‚±‚¶‚Ü /],
- [qw/ ¬“‡ ‚±‚¶‚Ü /],
- [qw/ ŽR“c ‚â‚Ü‚¾ /],
- [qw/ ‰i“c ‚È‚ª‚½ /],
-);
-
-@sort = ShiftJIS::Collate->new()->sortYomi(@data);
-
-uŠÈˆÕ‘ã•\“Ç‚ÝƇv‚ÍŽŸ‚̂悤‚É‚µ‚Äs‚¢‚Ü‚·BsortDaihyoƒƒ\ƒbƒh‚̎󂯎æ‚郊ƒXƒg‚ÌŠe—v‘f‚ÍA[ •\‹L—ñ, “Ç‚Ý—ñ ]‚Æ‚¢‚¤”z—ñƒŠƒtƒ@ƒŒƒ“ƒX‚Å‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB
-ƒTƒ“ƒvƒ‹ƒR[ƒh
-
-#!perl
-use ShiftJIS::Collate;
-
-my @data = (
- [qw/ ƒÉŒvŽZ ‚ç‚Þ‚¾‚¯‚¢‚³‚ñ /],
- [qw/ JIS”Ô† ‚¶‚·‚΂ñ‚²‚¤ /],
- [qw/ ˆÀ’B ‚ ‚¾‚¿ /],
- [qw/ ˆÀ“¡ ‚ ‚ñ‚Ç‚¤ /],
- [qw/ ‰Í¼ ‚©‚³‚¢ /],
- [qw/ ‰Í“à ‚©‚í‚¿ /],
- [qw/ Šp“c ‚©‚­‚½ /],
- [qw/ Šp“c ‚©‚Ç‚½ /],
- [qw/ ”@ŒŽ ‚«‚³‚炬 /],
- [qw/ ‰Í“à ‚±‚¤‚¿ /],
- [qw/ KŽR ‚±‚¤‚â‚Ü /],
- [qw/ KŽR ‚³‚«‚â‚Ü /],
- [qw/ ²“¡ ‚³‚Æ‚¤ /],
- [qw/ ²˜a“c ‚³‚킾 /],
- [qw/ ‘ò“‡ ‚³‚킵‚Ü /],
- [qw/ ‘ò“c ‚³‚킾 /],
- [qw/ àV“c ‚³‚킾 /],
- [qw/ Šp“c ‚‚̂¾ /],
- [qw/ ’Æˆä ‚Â‚¿‚¢ /],
- [qw/ “yˆä ‚‚¿‚¢ /],
- [qw/ “y‹ ‚‚¿‚¢ /],
- [qw/ ŒËˆä ‚Æ‚¢ /],
- [qw/ ŒË“c ‚Æ‚¾ /],
- [qw/ “yˆä ‚Ç‚¢ /],
- [qw/ “y‹ ‚Ç‚¢ /],
- [qw/ “yŠò ‚Æ‚« /],
- [qw/ ˆÀ“c ‚â‚·‚¾ /],
-);
-
-@sort = ShiftJIS::Collate->new()->sortDaihyo(@data);
-
-
-Shift-JIS‚ÌŠ¿Žš‚ðŠÜ‚Þƒtƒ@ƒCƒ‹–¼/ƒpƒX–¼
-–{€–Ú‚ÍA‘¼‚Ì€–Ú‚É‘‚µ‚ÄAŒŸ“¢•s[•ª‚Ì‚Ü‚Ü‹Lq‚µ‚Ä‚¢‚Ü‚·‚Ì‚ÅA‚à‚µ‰½‚©ŽQl‚É‚µ‚悤‚ÆŽv‚Á‚½ê‡A\•ª‚É’ˆÓ‚ÌãA”[“¾‚Å‚«‚é‚Ü‚Å‚²Ž©•ª‚Ìì‹ÆŠÂ‹«‚ŃeƒXƒg‚µ‚Ä‚­‚¾‚³‚¢B
-Windows (95/98/NT/2000‚È‚Ç) ‚ÅAƒtƒ@ƒCƒ‹–¼‚âƒpƒX–¼‚ªŠ¿Žši‚±‚±‚Å‚Í“ñƒoƒCƒg•¶Žš‚̈Ӗ¡‚ÅŽg‚Á‚Ä‚¢‚Ü‚·‚Ì‚ÅA•½‰¼–¼‚â‹L†‚È‚Ç‚àŠÜ‚Ý‚Ü‚·Bj‚ðŠÜ‚Þê‡APerl‚ňµ‚¤Û‚É–â‘肪¶‚¶‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B
-––”öƒoƒCƒg‚ª "\x5C" ‚ÌŠ¿Žš‚ð‚à‚ƒtƒ@ƒCƒ‹–¼/ƒpƒX–¼
-ƒfƒBƒŒƒNƒgƒŠ‘€ìŠÖ”imkdir, rmdir, opendir, -d ‚È‚ÇjAƒtƒ@ƒCƒ‹‘€ìŠÖ”iopen, unlink, -f ‚È‚Çj‚ÅAƒAƒNƒZƒX‚Å‚«‚È‚¢‚±‚Æ‚ª‚ ‚è‚Ü‚·B
-ƒtƒ@ƒCƒ‹‚ÌꇂÍA––”ö‚É”¼ŠpƒXƒy[ƒX‚ð“Y‚¦‚é‚ƃAƒNƒZƒX‚Å‚«‚éꇂª‚ ‚è‚Ü‚·i—Ⴆ‚ÎA-f '•\ ' ‚Ü‚½‚Í -f "\x95\x5C\x20" ‚È‚ÇjB
-ƒfƒBƒŒƒNƒgƒŠ‚ÌꇂÍA––”ö‚É / ‚© \ ‚ð“Y‚¦‚é‚ƃAƒNƒZƒX‚Å‚«‚éꇂª‚ ‚è‚Ü‚·i—Ⴆ‚ÎA-d '•\/' ‚Ü‚½‚Í -d "\x95\x5C/" ‚È‚ÇjB––”ö‚É“Y‚¦‚镶Žš‚𔼊pƒXƒy[ƒX‚Æ‚µ‚Ä‚àA‚¤‚Ü‚­ƒAƒNƒZƒX‚Å‚«‚éꇂª‚ ‚è‚Ü‚·B“Y‚¦‚镶Žš‚ÌŒó•â‚Æ‚µ‚ÄAŽOŽí—Þ‚Ì•¶ŽšiƒXƒ‰ƒbƒVƒ…A‰~‹L†A‹ó”’j‚ð‹“‚°‚Ü‚µ‚½‚ªA‚Ç‚Ì•¶Žš‚ª‚æ‚¢‚©‚ÍAŠÖ”‚É‚æ‚Á‚ĈقȂéꇂª‚ ‚é‚悤‚Å‚·BŽg—p‚·‚é‘O‚É\•ª‚ɃeƒXƒg‚µ‚Ä‚­‚¾‚³‚¢B
-‚È‚¨AƒfƒBƒŒƒNƒgƒŠ–¼‚Ì––”ö‚É / ‚© \ ‚ð“Y‚¦‚éê‡A‚à‚Æ‚à‚Æ––”ö‚É / ‚© \ ‚ª•t‚¢‚Ä‚¢‚éꇂɂÍA“ñd‚É•t‚¯‚é‚Æ‚¤‚Ü‚­s‚©‚È‚¢‚¨‚»‚ꂪ‚ ‚è‚Ü‚·‚Ì‚ÅA•¶Žš—ñ˜AŒ‹‚Ì‘O‚ÉŒŸ¸‚µ‚½‚Ù‚¤‚ª‚æ‚¢‚Å‚µ‚傤B
-‚Ç‚¤‚µ‚Ä‚à‹““®‚ª•s–¾‚ÅM—Š‚Å‚«‚È‚¢ê‡‚ÍA`` ‚Ü‚½‚Í qx// ‚â system()ŠÖ”‚È‚Ç‚ð’Ê‚¶‚ÄWindows‚̃Rƒ}ƒ“ƒh‚ðŒÄ‚Ô‚Ì‚ª—Ç‚¢‚ÆŽv‚¢‚Ü‚·B
-‚¨‚Ü‚¯
- Shift-JIS ‚Å‘‚©‚ꂽ POD ‚ð Perl 5.8.1, 5.8.2 ‚Ì Pod::Html ‚Å HTML ‚É•ÏŠ·‚µ‚½ê‡AƒAƒ“ƒJ[‚Ì–¼‘O‚ÍA ‰p”Žš‚Ɖ¼–¼•¶Žš [0xA6..0xDF] ‚𜂫A ‘¼‚ÌŠeƒoƒCƒg‚͉ºüi'_'j‚É•ÏŠ·‚³‚ê‚é‚悤‚Å‚·B ‹ï‘Ì“I‚É‚ÍAuse locale; ‰º‚ÅAlc ‚Æ s/\W/_/g ‚ðŽÀs‚µ‚½Œ‹‰Ê (cf. Pod::Html::anchorify) ‚É‚È‚è‚Ü‚·B
-[2003-11-18]
-Perl‚̃y[ƒW
diff --git a/tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp b/tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp
deleted file mode 100644
index a3c1fc525b..0000000000
--- a/tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtCore/QTextStream>
-#include <stdio.h>
-
-int main(int, char**)
-{
- QTextStream qin(stdin);
- if (!qin.atEnd()) {
- int a, b, c;
- qin >> a >> b >> c;
- fprintf(stderr, "%d %d %d\n", a, b, c);
- }
- return 0;
-}
diff --git a/tests/auto/corelib/io/qtextstream/stdinProcess/stdinProcess.pro b/tests/auto/corelib/io/qtextstream/stdinProcess/stdinProcess.pro
deleted file mode 100644
index 4a4c091dcb..0000000000
--- a/tests/auto/corelib/io/qtextstream/stdinProcess/stdinProcess.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-SOURCES += main.cpp
-QT = core
-CONFIG += console
-CONFIG -= app_bundle
-DESTDIR = ./
-
-# This app is testdata for tst_qtextstream
-target.path = $$[QT_INSTALL_TESTS]/tst_qtextstream/$$TARGET
-INSTALLS += target
diff --git a/tests/auto/corelib/io/qtextstream/task113817.txt b/tests/auto/corelib/io/qtextstream/task113817.txt
deleted file mode 100644
index 281ae8c9f2..0000000000
--- a/tests/auto/corelib/io/qtextstream/task113817.txt
+++ /dev/null
@@ -1,1095 +0,0 @@
-1 13 -14
-2 13 14
-3 40 -3
-4 16383 4
-5 16383 5
-6 16383 6
-7 16383 7
-8 16383 8
-9 16383 9
-10 16383 10
-11 16383 -1
-12 16383 -1
-13 16383 -1
-14 16383 -1
-15 16383 -1
-16 16383 -1
-17 16383 -1
-18 16383 -1
-19 16383 -1
-20 16383 -1
-21 16383 -1
-22 16383 -1
-23 16383 -1
-24 16383 -1
-25 16383 -1
-26 16383 -1
-27 16383 -1
-28 16383 -1
-29 16383 -1
-30 16383 -1
-31 16383 -1
-32 16383 -1
-33 16383 -1
-34 16383 -1
-35 16383 -1
-36 16383 -1
-37 16383 -1
-38 16383 -1
-39 16383 -1
-40 16383 -1
-41 16383 -1
-42 16383 -1
-43 16383 -1
-44 16383 -1
-45 16383 -1
-46 16383 -1
-47 16383 -1
-48 16383 -1
-49 16383 -1
-50 16383 -1
-51 16383 -1
-52 16383 -1
-53 16383 -1
-54 16383 -1
-55 16383 -1
-56 16383 -1
-57 16383 -1
-58 16383 -1
-59 16383 -1
-60 16383 -1
-61 16383 -1
-62 16383 -1
-63 16383 -1
-64 16383 -1
-65 16383 -1
-66 16383 -1
-67 16383 -1
-68 16383 -1
-69 16383 -1
-70 16383 -1
-71 16383 -1
-72 16383 -1
-73 16383 -1
-74 16383 -1
-75 16383 -1
-76 16383 -1
-77 16383 -1
-78 16383 -1
-79 16383 -1
-80 16383 -1
-81 16383 -1
-82 16383 -1
-83 16383 -1
-84 16383 -1
-85 16383 -1
-86 16383 -1
-87 16383 -1
-88 16383 -1
-89 16383 -1
-90 16383 -1
-91 16383 -1
-92 16383 -1
-93 16383 -1
-94 16383 -1
-95 16383 -1
-96 16383 -1
-97 16383 -1
-98 16383 -1
-99 16383 -1
-100 16383 -1
-101 16383 -1
-102 16383 -1
-103 16383 -1
-104 16383 -1
-105 16383 -1
-106 16383 -1
-107 16383 -1
-108 16383 -1
-109 16383 -1
-110 16383 -1
-111 16383 -1
-112 16383 -1
-113 16383 -1
-114 16383 -1
-115 16383 -1
-116 16383 -1
-117 16383 -1
-118 16383 -1
-119 16383 -1
-120 16383 -1
-121 16383 -1
-122 16383 -1
-123 16383 -1
-124 16383 -1
-125 16383 -1
-126 16383 -1
-127 16383 -1
-128 16383 -1
-129 16383 -1
-130 16383 -1
-131 16383 -1
-132 16383 -1
-133 16383 -1
-134 16383 -1
-135 16383 -1
-136 16383 -1
-137 16383 -1
-138 16383 -1
-139 16383 -1
-140 16383 -1
-141 16383 -1
-142 16383 -1
-143 16383 -1
-144 16383 -1
-145 16383 -1
-146 16383 -1
-147 16383 -1
-148 16383 -1
-149 16383 -1
-150 16383 -1
-151 16383 -1
-152 16383 -1
-153 16383 -1
-154 16383 -1
-155 16383 -1
-156 16383 -1
-157 16383 -1
-158 16383 -1
-159 16383 -1
-160 16383 -1
-161 16383 -1
-162 16383 -1
-163 16383 -1
-164 16383 -1
-165 16383 -1
-166 16383 -1
-167 16383 -1
-168 16383 -1
-169 16383 -1
-170 16383 -1
-171 16383 -1
-172 16383 -1
-173 16383 -1
-174 16383 -1
-175 16383 -1
-176 16383 -1
-177 16383 -1
-178 16383 -1
-179 16383 -1
-180 16383 -1
-181 16383 -1
-182 16383 -1
-183 16383 -1
-184 16383 -1
-185 16383 -1
-186 16383 -1
-187 16383 -1
-188 16383 -1
-189 16383 -1
-190 16383 -1
-191 16383 -1
-192 16383 -1
-193 16383 -1
-194 16383 -1
-195 16383 -1
-196 16383 -1
-197 16383 -1
-198 16383 -1
-199 16383 -1
-200 16383 -1
-201 16383 -1
-202 16383 -1
-203 16383 -1
-204 16383 -1
-205 16383 -1
-206 16383 -1
-207 16383 -1
-208 16383 -1
-209 16383 -1
-210 16383 -1
-211 16383 -1
-212 16383 -1
-213 16383 -1
-214 16383 -1
-215 16383 -1
-216 16383 -1
-217 16383 -1
-218 16383 -1
-219 16383 -1
-220 16383 -1
-221 16383 -1
-222 16383 -1
-223 16383 -1
-224 16383 -1
-225 16383 -1
-226 16383 -1
-227 16383 -1
-228 16383 -1
-229 16383 -1
-230 16383 -1
-231 16383 -1
-232 16383 -1
-233 16383 -1
-234 16383 -1
-235 16383 -1
-236 16383 -1
-237 16383 -1
-238 16383 -1
-239 16383 -1
-240 16383 -1
-241 16383 -1
-242 16383 -1
-243 16383 -1
-244 16383 -1
-245 16383 -1
-246 16383 -1
-247 16383 -1
-248 16383 -1
-249 16383 -1
-250 16383 -1
-251 16383 -1
-252 16383 -1
-253 16383 -1
-254 16383 -1
-255 16383 -1
-256 16383 -1
-257 16383 -1
-258 16383 -1
-259 16383 -1
-260 16383 -1
-261 16383 -1
-262 16383 -1
-263 16383 -1
-264 16383 -1
-265 16383 -1
-266 16383 -1
-267 16383 -1
-268 16383 -1
-269 16383 -1
-270 16383 -1
-271 16383 -1
-272 16383 -1
-273 16383 -1
-274 16383 -1
-275 16383 -1
-276 16383 -1
-277 16383 -1
-278 16383 -1
-279 16383 -1
-280 16383 -1
-281 16383 -1
-282 16383 -1
-283 16383 -1
-284 16383 -1
-285 16383 -1
-286 16383 -1
-287 16383 -1
-288 16383 -1
-289 16383 -1
-290 16383 -1
-291 16383 -1
-292 16383 -1
-293 16383 -1
-294 16383 -1
-295 16383 -1
-296 16383 -1
-297 16383 -1
-298 16383 -1
-299 16383 -1
-300 16383 -1
-301 16383 -1
-302 16383 -1
-303 16383 -1
-304 16383 -1
-305 16383 -1
-306 16383 -1
-307 16383 -1
-308 16383 -1
-309 16383 -1
-310 16383 -1
-311 16383 -1
-312 16383 -1
-313 16383 -1
-314 16383 -1
-315 16383 -1
-316 16383 -1
-317 16383 -1
-318 16383 -1
-319 16383 -1
-320 16383 -1
-321 16383 -1
-322 16383 -1
-323 16383 -1
-324 16383 -1
-325 16383 -1
-326 16383 -1
-327 16383 -1
-328 16383 -1
-329 16383 -1
-330 16383 -1
-331 16383 -1
-332 16383 -1
-333 16383 -1
-334 16383 -1
-335 16383 -1
-336 16383 -1
-337 16383 -1
-338 16383 -1
-339 16383 -1
-340 16383 -1
-341 16383 -1
-342 16383 -1
-343 16383 -1
-344 16383 -1
-345 16383 -1
-346 16383 -1
-347 16383 -1
-348 16383 -1
-349 16383 -1
-350 16383 -1
-351 16383 -1
-352 16383 -1
-353 16383 -1
-354 16383 -1
-355 16383 -1
-356 16383 -1
-357 16383 -1
-358 16383 -1
-359 16383 -1
-360 16383 -1
-361 16383 -1
-362 16383 -1
-363 16383 -1
-364 16383 -1
-365 16383 -1
-366 16383 -1
-367 16383 -1
-368 16383 -1
-369 16383 -1
-370 16383 -1
-371 16383 -1
-372 16383 -1
-373 16383 -1
-374 16383 -1
-375 16383 -1
-376 16383 -1
-377 16383 -1
-378 16383 -1
-379 16383 -1
-380 16383 -1
-381 16383 -1
-382 16383 -1
-383 16383 -1
-384 16383 -1
-385 16383 -1
-386 16383 -1
-387 16383 -1
-388 16383 -1
-389 16383 -1
-390 16383 -1
-391 16383 -1
-392 16383 -1
-393 16383 -1
-394 16383 -1
-395 16383 -1
-396 16383 -1
-397 16383 -1
-398 16383 -1
-399 16383 -1
-400 16383 -1
-401 16383 -1
-402 16383 -1
-403 16383 -1
-404 16383 -1
-405 16383 -1
-406 16383 -1
-407 16383 -1
-408 16383 -1
-409 16383 -1
-410 16383 -1
-411 16383 -1
-412 16383 -1
-413 16383 -1
-414 16383 -1
-415 16383 -1
-416 16383 -1
-417 16383 -1
-418 16383 -1
-419 16383 -1
-420 16383 -1
-421 16383 -1
-422 16383 -1
-423 16383 -1
-424 16383 -1
-425 16383 -1
-426 16383 -1
-427 16383 -1
-428 16383 -1
-429 16383 -1
-430 16383 -1
-431 16383 -1
-432 16383 -1
-433 16383 -1
-434 16383 -1
-435 16383 -1
-436 16383 -1
-437 16383 -1
-438 16383 -1
-439 16383 -1
-440 16383 -1
-441 16383 -1
-442 16383 -1
-443 16383 -1
-444 16383 -1
-445 16383 -1
-446 16383 -1
-447 16383 -1
-448 16383 -1
-449 16383 -1
-450 16383 -1
-451 16383 -1
-452 16383 -1
-453 16383 -1
-454 16383 -1
-455 16383 -1
-456 16383 -1
-457 16383 -1
-458 16383 -1
-459 16383 -1
-460 16383 -1
-461 16383 -1
-462 16383 -1
-463 16383 -1
-464 16383 -1
-465 16383 -1
-466 16383 -1
-467 16383 -1
-468 16383 -1
-469 16383 -1
-470 16383 -1
-471 16383 -1
-472 16383 -1
-473 16383 -1
-474 16383 -1
-475 16383 -1
-476 16383 -1
-477 16383 -1
-478 16383 -1
-479 16383 -1
-480 16383 -1
-481 16383 -1
-482 16383 -1
-483 16383 -1
-484 16383 -1
-485 16383 -1
-486 16383 -1
-487 16383 -1
-488 16383 -1
-489 16383 -1
-490 16383 -1
-491 16383 -1
-492 16383 -1
-493 16383 -1
-494 16383 -1
-495 16383 -1
-496 16383 -1
-497 16383 -1
-498 16383 -1
-499 16383 -1
-500 16383 -1
-501 16383 -1
-502 16383 -1
-503 16383 -1
-504 16383 -1
-505 16383 -1
-506 16383 -1
-507 16383 -1
-508 16383 -1
-509 16383 -1
-510 16383 -1
-511 16383 -1
-512 16383 -1
-513 16383 -1
-514 16383 -1
-515 16383 -1
-516 16383 -1
-517 16383 -1
-518 16383 -1
-519 16383 -1
-520 16383 -1
-521 16383 -1
-522 16383 -1
-523 16383 -1
-524 16383 -1
-525 16383 -1
-526 16383 -1
-527 16383 -1
-528 16383 -1
-529 16383 -1
-530 16383 -1
-531 16383 -1
-532 16383 -1
-533 16383 -1
-534 16383 -1
-535 16383 -1
-536 16383 -1
-537 16383 -1
-538 16383 -1
-539 16383 -1
-540 16383 -1
-541 16383 -1
-542 16383 -1
-543 16383 -1
-544 16383 -1
-545 16383 -1
-546 16383 -1
-547 16383 -1
-548 16383 -1
-549 16383 -1
-550 16383 -1
-551 16383 -1
-552 16383 -1
-553 16383 -1
-554 16383 -1
-555 16383 -1
-556 16383 -1
-557 16383 -1
-558 16383 -1
-559 16383 -1
-560 16383 -1
-561 16383 -1
-562 16383 -1
-563 16383 -1
-564 16383 -1
-565 16383 -1
-566 16383 -1
-567 16383 -1
-568 16383 -1
-569 16383 -1
-570 16383 -1
-571 16383 -1
-572 16383 -1
-573 16383 -1
-574 16383 -1
-575 16383 -1
-576 16383 -1
-577 16383 -1
-578 16383 -1
-579 16383 -1
-580 16383 -1
-581 16383 -1
-582 16383 -1
-583 16383 -1
-584 16383 -1
-585 16383 -1
-586 16383 -1
-587 16383 -1
-588 16383 -1
-589 16383 -1
-590 16383 -1
-591 16383 -1
-592 16383 -1
-593 16383 -1
-594 16383 -1
-595 16383 -1
-596 16383 -1
-597 16383 -1
-598 16383 -1
-599 16383 -1
-600 16383 -1
-601 16383 -1
-602 16383 -1
-603 16383 -1
-604 16383 -1
-605 16383 -1
-606 16383 -1
-607 16383 -1
-608 16383 -1
-609 16383 -1
-610 16383 -1
-611 16383 -1
-612 16383 -1
-613 16383 -1
-614 16383 -1
-615 16383 -1
-616 16383 -1
-617 16383 -1
-618 16383 -1
-619 16383 -1
-620 16383 -1
-621 16383 -1
-622 16383 -1
-623 16383 -1
-624 16383 -1
-625 16383 -1
-626 16383 -1
-627 16383 -1
-628 16383 -1
-629 16383 -1
-630 16383 -1
-631 16383 -1
-632 16383 -1
-633 16383 -1
-634 16383 -1
-635 16383 -1
-636 16383 -1
-637 16383 -1
-638 16383 -1
-639 16383 -1
-640 16383 -1
-641 16383 -1
-642 16383 -1
-643 16383 -1
-644 16383 -1
-645 16383 -1
-646 16383 -1
-647 16383 -1
-648 16383 -1
-649 16383 -1
-650 16383 -1
-651 16383 -1
-652 16383 -1
-653 16383 -1
-654 16383 -1
-655 16383 -1
-656 16383 -1
-657 16383 -1
-658 16383 -1
-659 16383 -1
-660 16383 -1
-661 16383 -1
-662 16383 -1
-663 16383 -1
-664 16383 -1
-665 16383 -1
-666 16383 -1
-667 16383 -1
-668 16383 -1
-669 16383 -1
-670 16383 -1
-671 16383 -1
-672 16383 -1
-673 16383 -1
-674 16383 -1
-675 16383 -1
-676 16383 -1
-677 16383 -1
-678 16383 -1
-679 16383 -1
-680 16383 -1
-681 16383 -1
-682 16383 -1
-683 16383 -1
-684 16383 -1
-685 16383 -1
-686 16383 -1
-687 16383 -1
-688 16383 -1
-689 16383 -1
-690 16383 -1
-691 16383 -1
-692 16383 -1
-693 16383 -1
-694 16383 -1
-695 16383 -1
-696 16383 -1
-697 16383 -1
-698 16383 -1
-699 16383 -1
-700 16383 -1
-701 16383 -1
-702 16383 -1
-703 16383 -1
-704 16383 -1
-705 16383 -1
-706 16383 -1
-707 16383 -1
-708 16383 -1
-709 16383 -1
-710 16383 -1
-711 16383 -1
-712 16383 -1
-713 16383 -1
-714 16383 -1
-715 16383 -1
-716 16383 -1
-717 16383 -1
-718 16383 -1
-719 16383 -1
-720 16383 -1
-721 16383 -1
-722 16383 -1
-723 16383 -1
-724 16383 -1
-725 16383 -1
-726 16383 -1
-727 16383 -1
-728 16383 -1
-729 16383 -1
-730 16383 -1
-731 16383 -1
-732 16383 -1
-733 16383 -1
-734 16383 -1
-735 16383 -1
-736 16383 -1
-737 16383 -1
-738 16383 -1
-739 16383 -1
-740 16383 -1
-741 16383 -1
-742 16383 -1
-743 16383 -1
-744 16383 -1
-745 16383 -1
-746 16383 -1
-747 16383 -1
-748 16383 -1
-749 16383 -1
-750 16383 -1
-751 16383 -1
-752 16383 -1
-753 16383 -1
-754 16383 -1
-755 16383 -1
-756 16383 -1
-757 16383 -1
-758 16383 -1
-759 16383 -1
-760 16383 -1
-761 16383 -1
-762 16383 -1
-763 16383 -1
-764 16383 -1
-765 16383 -1
-766 16383 -1
-767 16383 -1
-768 16383 -1
-769 16383 -1
-770 16383 -1
-771 16383 -1
-772 16383 -1
-773 16383 -1
-774 16383 -1
-775 16383 -1
-776 16383 -1
-777 16383 -1
-778 16383 -1
-779 16383 -1
-780 16383 -1
-781 16383 -1
-782 16383 -1
-783 16383 -1
-784 16383 -1
-785 16383 -1
-786 16383 -1
-787 16383 -1
-788 16383 -1
-789 16383 -1
-790 16383 -1
-791 16383 -1
-792 16383 -1
-793 16383 -1
-794 16383 -1
-795 16383 -1
-796 16383 -1
-797 16383 -1
-798 16383 -1
-799 16383 -1
-800 16383 -1
-801 16383 -1
-802 16383 -1
-803 16383 -1
-804 16383 -1
-805 16383 -1
-806 16383 -1
-807 16383 -1
-808 16383 -1
-809 16383 -1
-810 16383 -1
-811 16383 -1
-812 16383 -1
-813 16383 -1
-814 16383 -1
-815 16383 -1
-816 16383 -1
-817 16383 -1
-818 16383 -1
-819 16383 -1
-820 16383 -1
-821 16383 -1
-822 16383 -1
-823 16383 -1
-824 16383 -1
-825 16383 -1
-826 16383 -1
-827 16383 -1
-828 16383 -1
-829 16383 -1
-830 16383 -1
-831 16383 -1
-832 16383 -1
-833 16383 -1
-834 16383 -1
-835 16383 -1
-836 16383 -1
-837 16383 -1
-838 16383 -1
-839 16383 -1
-840 16383 -1
-841 16383 -1
-842 16383 -1
-843 16383 -1
-844 16383 -1
-845 16383 -1
-846 16383 -1
-847 16383 -1
-848 16383 -1
-849 16383 -1
-850 16383 -1
-851 16383 -1
-852 16383 -1
-853 16383 -1
-854 16383 -1
-855 16383 -1
-856 16383 -1
-857 16383 -1
-858 16383 -1
-859 16383 -1
-860 16383 -1
-861 16383 -1
-862 16383 -1
-863 16383 -1
-864 16383 -1
-865 16383 -1
-866 16383 -1
-867 16383 -1
-868 16383 -1
-869 16383 -1
-870 16383 -1
-871 16383 -1
-872 16383 -1
-873 16383 -1
-874 16383 -1
-875 16383 -1
-876 16383 -1
-877 16383 -1
-878 16383 -1
-879 16383 -1
-880 16383 -1
-881 16383 -1
-882 16383 -1
-883 16383 -1
-884 16383 -1
-885 16383 -1
-886 16383 -1
-887 16383 -1
-888 16383 -1
-889 16383 -1
-890 16383 -1
-891 16383 -1
-892 16383 -1
-893 16383 -1
-894 16383 -1
-895 16383 -1
-896 16383 -1
-897 16383 -1
-898 16383 -1
-899 16383 -1
-900 16383 -1
-901 16383 -1
-902 16383 -1
-903 16383 -1
-904 16383 -1
-905 16383 -1
-906 16383 -1
-907 16383 -1
-908 16383 -1
-909 16383 -1
-910 16383 -1
-911 16383 -1
-912 16383 -1
-913 16383 -1
-914 16383 -1
-915 16383 -1
-916 16383 -1
-917 16383 -1
-918 16383 -1
-919 16383 -1
-920 16383 -1
-921 16383 -1
-922 16383 -1
-923 16383 -1
-924 16383 -1
-925 16383 -1
-926 16383 -1
-927 16383 -1
-928 16383 -1
-929 16383 -1
-930 16383 -1
-931 16383 -1
-932 16383 -1
-933 16383 -1
-934 16383 -1
-935 16383 -1
-936 16383 -1
-937 16383 -1
-938 16383 -1
-939 16383 -1
-940 16383 -1
-941 16383 -1
-942 16383 -1
-943 16383 -1
-944 16383 -1
-945 16383 -1
-946 16383 -1
-947 16383 -1
-948 16383 -1
-949 16383 -1
-950 16383 -1
-951 16383 -1
-952 16383 -1
-953 16383 -1
-954 16383 -1
-955 16383 -1
-956 16383 -1
-957 16383 -1
-958 16383 -1
-959 16383 -1
-960 16383 -1
-961 16383 -1
-962 16383 -1
-963 16383 -1
-964 16383 -1
-965 16383 -1
-966 16383 -1
-967 16383 -1
-968 16383 -1
-969 16383 -1
-970 16383 -1
-971 16383 -1
-972 16383 -1
-973 16383 -1
-974 16383 -1
-975 16383 -1
-976 16383 -1
-977 16383 -1
-978 16383 -1
-979 16383 -1
-980 16383 -1
-981 16383 -1
-982 16383 -1
-983 16383 -1
-984 16383 -1
-985 16383 -1
-986 16383 -1
-987 16383 -1
-988 16383 -1
-989 16383 -1
-990 16383 -1
-991 16383 -1
-992 16383 -1
-993 16383 -1
-994 16383 -1
-995 16383 -1
-996 16383 -1
-997 16383 -1
-998 16383 -1
-999 16383 -1
-1000 16383 -1
-1001 16383 -1
-1002 16383 -1
-1003 16383 -1
-1004 16383 -1
-1005 16383 -1
-1006 16383 -1
-1007 16383 -1
-1008 16383 -1
-1009 16383 -1
-1010 16383 -1
-1011 16383 -1
-1012 16383 -1
-1013 16383 -1
-1014 16383 -1
-1015 16383 -1
-1016 16383 -1
-1017 16383 -1
-1018 16383 -1
-1019 16383 -1
-1020 16383 -1
-1021 16383 -1
-1022 16383 -1
-1023 16383 -1
-1024 16383 -1
-1025 16383 -1
-1026 16383 -1
-1027 16383 -1
-1028 16383 -1
-1029 16383 -1
-1030 16383 -1
-1031 16383 -1
-1032 16383 -1
-1033 16383 -1
-1034 16383 -1
-1035 16383 -1
-1036 16383 -1
-1037 16383 -1
-1038 16383 -1
-1039 16383 -1
-1040 16383 -1
-1041 16383 -1
-1042 16383 -1
-1043 16383 -1
-1044 16383 -1
-1045 16383 -1
-1046 16383 -1
-1047 16383 -1
-1048 16383 -1
-1049 16383 -1
-1050 16383 -1
-1051 16383 -1
-1052 16383 -1
-1053 16383 -1
-1054 16383 -1
-1055 16383 -1
-1056 16383 -1
-1057 16383 -1
-1058 16383 -1
-1059 16383 -1
-1060 16383 -1
-1061 16383 -1
-1062 16383 -1
-1063 16383 -1
-1064 16383 -1
-1065 16383 -1
-1066 16383 -1
-1067 16383 -1
-1068 16383 -1
-1069 16383 -1
-1070 16383 -1
-1071 16383 -1
-1072 16383 -1
-1073 16383 -1
-1074 16383 -1
-1075 16383 -1
-1076 16383 -1
-1077 16383 -1
-1078 16383 -1
-1079 16383 -1
-1080 16383 -1
-1081 16383 -1
-1082 16383 -1
-1083 16383 -1
-1084 16383 -1
-1085 16383 -1
-1086 16383 -1
-1087 16383 -1
-1088 16383 -1
-1089 16383 -1
-1090 16383 -1
-1091 16383 -1
-1092 16383 -1
-1093 16383 -1
-1094 16383 -1
-1095 16383 -1
diff --git a/tests/auto/corelib/io/qtextstream/test/test.pro b/tests/auto/corelib/io/qtextstream/test/test.pro
deleted file mode 100644
index 3dcfa0b414..0000000000
--- a/tests/auto/corelib/io/qtextstream/test/test.pro
+++ /dev/null
@@ -1,26 +0,0 @@
-CONFIG += testcase
-TARGET = ../tst_qtextstream
-QT = core network testlib
-SOURCES = ../tst_qtextstream.cpp
-RESOURCES += ../qtextstream.qrc
-
-win32 {
- CONFIG(debug, debug|release) {
- TARGET = ../../debug/tst_qtextstream
- } else {
- TARGET = ../../release/tst_qtextstream
- }
-}
-
-TESTDATA += \
- ../rfc3261.txt \
- ../shift-jis.txt \
- ../task113817.txt \
- ../qtextstream.qrc \
- ../tst_qtextstream.cpp \
- ../resources \
- ../BLACKLIST
-
-builtin_testdata {
- DEFINES += BUILTIN_TESTDATA
-}
diff --git a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp
deleted file mode 100644
index df8746e518..0000000000
--- a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp
+++ /dev/null
@@ -1,3057 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtTest/QtTest>
-
-#ifdef Q_OS_UNIX
-#include <locale.h>
-#endif
-
-#include <QBuffer>
-#include <QByteArray>
-#include <QDebug>
-#include <QFile>
-#include <QTcpSocket>
-#include <QTemporaryDir>
-#include <QTextStream>
-#include <QTextCodec>
-#if QT_CONFIG(process)
-# include <QProcess>
-#endif
-#include "../../../network-settings.h"
-
-
-QT_BEGIN_NAMESPACE
-template<> struct QMetaTypeId<QIODevice::OpenModeFlag>
-{ enum { Defined = 1 }; static inline int qt_metatype_id() { return QMetaType::Int; } };
-QT_END_NAMESPACE
-
-class tst_QTextStream : public QObject
-{
- Q_OBJECT
-
-public:
- tst_QTextStream();
-
-public slots:
- void initTestCase();
- void cleanup();
- void cleanupTestCase();
-
-private slots:
- void getSetCheck();
- void construction();
-
- // lines
- void readLineFromDevice_data();
- void readLineFromDevice();
- void readLineFromString_data();
- void readLineFromString();
- void readLineFromTextDevice_data();
- void readLineFromTextDevice();
- void readLineUntilNull();
- void readLineMaxlen_data();
- void readLineMaxlen();
- void readLinesFromBufferCRCR();
- void readLineInto();
-
- // all
- void readAllFromDevice_data();
- void readAllFromDevice();
- void readAllFromString_data();
- void readAllFromString();
- void readLineFromStringThenChangeString();
-
- // device tests
- void setDevice();
-
- // char operators
- void QChar_operators_FromDevice_data();
- void QChar_operators_FromDevice();
- void char_operators_FromDevice_data();
- void char_operators_FromDevice();
-
- // natural number read operator
- void signedShort_read_operator_FromDevice_data();
- void signedShort_read_operator_FromDevice();
- void unsignedShort_read_operator_FromDevice_data();
- void unsignedShort_read_operator_FromDevice();
- void signedInt_read_operator_FromDevice_data();
- void signedInt_read_operator_FromDevice();
- void unsignedInt_read_operator_FromDevice_data();
- void unsignedInt_read_operator_FromDevice();
- void qlonglong_read_operator_FromDevice_data();
- void qlonglong_read_operator_FromDevice();
- void qulonglong_read_operator_FromDevice_data();
- void qulonglong_read_operator_FromDevice();
-
- // natural number write operator
- void signedShort_write_operator_ToDevice_data();
- void signedShort_write_operator_ToDevice();
- void unsignedShort_write_operator_ToDevice_data();
- void unsignedShort_write_operator_ToDevice();
- void signedInt_write_operator_ToDevice_data();
- void signedInt_write_operator_ToDevice();
- void unsignedInt_write_operator_ToDevice_data();
- void unsignedInt_write_operator_ToDevice();
- void qlonglong_write_operator_ToDevice_data();
- void qlonglong_write_operator_ToDevice();
- void qulonglong_write_operator_ToDevice_data();
- void qulonglong_write_operator_ToDevice();
-
- void int_read_with_locale_data();
- void int_read_with_locale();
-
- void int_write_with_locale_data();
- void int_write_with_locale();
-
- // real number read operator
- void float_read_operator_FromDevice_data();
- void float_read_operator_FromDevice();
- void double_read_operator_FromDevice_data();
- void double_read_operator_FromDevice();
-
- // real number write operator
- void float_write_operator_ToDevice_data();
- void float_write_operator_ToDevice();
- void double_write_operator_ToDevice_data();
- void double_write_operator_ToDevice();
-
- void double_write_with_flags_data();
- void double_write_with_flags();
-
- void double_write_with_precision_data();
- void double_write_with_precision();
-
- // text read operators
- void charPtr_read_operator_FromDevice_data();
- void charPtr_read_operator_FromDevice();
- void stringRef_read_operator_FromDevice_data();
- void stringRef_read_operator_FromDevice();
- void byteArray_read_operator_FromDevice_data();
- void byteArray_read_operator_FromDevice();
-
- // text write operators
- void string_write_operator_ToDevice_data();
- void string_write_operator_ToDevice();
- void latin1String_write_operator_ToDevice();
- void stringref_write_operator_ToDevice();
-
- // other
- void skipWhiteSpace_data();
- void skipWhiteSpace();
- void lineCount_data();
- void lineCount();
- void performance();
- void hexTest_data();
- void hexTest();
- void binTest_data();
- void binTest();
- void octTest_data();
- void octTest();
- void zeroTermination();
- void ws_manipulator();
- void stillOpenWhenAtEnd();
- void readNewlines_data();
- void readNewlines();
- void seek();
- void pos();
- void pos2();
- void pos3LargeFile();
- void readStdin();
- void readAllFromStdin();
- void readLineFromStdin();
- void read();
- void qbool();
- void forcePoint();
- void forceSign();
- void read0d0d0a();
- void numeralCase_data();
- void numeralCase();
- void nanInf();
- void utf8IncompleteAtBufferBoundary_data();
- void utf8IncompleteAtBufferBoundary();
- void writeSeekWriteNoBOM();
-
- // status
- void status_real_read_data();
- void status_real_read();
- void status_integer_read();
- void status_word_read();
- void status_write_error();
-
- // use case tests
- void useCase1();
- void useCase2();
-
- // manipulators
- void manipulators_data();
- void manipulators();
-
- // UTF-16 BOM (Byte Order Mark)
- void generateBOM();
- void readBomSeekBackReadBomAgain();
-
- // Regression tests for old bugs
- void alignAccountingStyle();
- void setCodec();
-
- void textModeOnEmptyRead();
-
-private:
- void generateLineData(bool for_QString);
- void generateAllData(bool for_QString);
- void generateOperatorCharData(bool for_QString);
- void generateNaturalNumbersData(bool for_QString);
- void generateRealNumbersData(bool for_QString);
- void generateStringData(bool for_QString);
- void generateRealNumbersDataWrite();
-
- QTemporaryDir tempDir;
- QString testFileName;
-#ifdef BUILTIN_TESTDATA
- QSharedPointer<QTemporaryDir> m_dataDir;
-#endif
- const QString m_rfc3261FilePath;
- const QString m_shiftJisFilePath;
-};
-
-void runOnExit()
-{
- QByteArray buffer;
- QTextStream(&buffer) << "This will try to use QTextCodec::codecForLocale" << endl;
-}
-Q_DESTRUCTOR_FUNCTION(runOnExit)
-
-tst_QTextStream::tst_QTextStream()
- : tempDir(QDir::tempPath() + "/tst_qtextstream.XXXXXX")
- , m_rfc3261FilePath(QFINDTESTDATA("rfc3261.txt"))
- , m_shiftJisFilePath(QFINDTESTDATA("shift-jis.txt"))
-{
-}
-
-void tst_QTextStream::initTestCase()
-{
- QVERIFY2(tempDir.isValid(), qPrintable(tempDir.errorString()));
- QVERIFY(!m_rfc3261FilePath.isEmpty());
- QVERIFY(!m_shiftJisFilePath.isEmpty());
-
- testFileName = tempDir.path() + "/testfile";
-
-#ifdef BUILTIN_TESTDATA
- m_dataDir = QEXTRACTTESTDATA("/");
- QVERIFY2(QDir::setCurrent(m_dataDir->path()), qPrintable("Could not chdir to " + m_dataDir->path()));
-#else
- // chdir into the testdata dir and refer to our helper apps with relative paths
- QString testdata_dir = QFileInfo(QFINDTESTDATA("stdinProcess")).absolutePath();
- QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir));
-#endif
-}
-
-// Testing get/set functions
-void tst_QTextStream::getSetCheck()
-{
- // Initialize codecs
- QTextStream obj1;
- // QTextCodec * QTextStream::codec()
- // void QTextStream::setCodec(QTextCodec *)
- QTextCodec *var1 = QTextCodec::codecForName("en");
- obj1.setCodec(var1);
- QCOMPARE(var1, obj1.codec());
- obj1.setCodec((QTextCodec *)0);
- QCOMPARE((QTextCodec *)0, obj1.codec());
-
- // bool QTextStream::autoDetectUnicode()
- // void QTextStream::setAutoDetectUnicode(bool)
- obj1.setAutoDetectUnicode(false);
- QCOMPARE(false, obj1.autoDetectUnicode());
- obj1.setAutoDetectUnicode(true);
- QCOMPARE(true, obj1.autoDetectUnicode());
-
- // bool QTextStream::generateByteOrderMark()
- // void QTextStream::setGenerateByteOrderMark(bool)
- obj1.setGenerateByteOrderMark(false);
- QCOMPARE(false, obj1.generateByteOrderMark());
- obj1.setGenerateByteOrderMark(true);
- QCOMPARE(true, obj1.generateByteOrderMark());
-
- // QIODevice * QTextStream::device()
- // void QTextStream::setDevice(QIODevice *)
- QFile *var4 = new QFile;
- obj1.setDevice(var4);
- QCOMPARE(static_cast<QIODevice *>(var4), obj1.device());
- obj1.setDevice((QIODevice *)0);
- QCOMPARE((QIODevice *)0, obj1.device());
- delete var4;
-
- // Status QTextStream::status()
- // void QTextStream::setStatus(Status)
- obj1.setStatus(QTextStream::Status(QTextStream::Ok));
- QCOMPARE(QTextStream::Status(QTextStream::Ok), obj1.status());
- obj1.setStatus(QTextStream::Status(QTextStream::ReadPastEnd));
- QCOMPARE(QTextStream::Status(QTextStream::ReadPastEnd), obj1.status());
- obj1.resetStatus();
- obj1.setStatus(QTextStream::Status(QTextStream::ReadCorruptData));
- QCOMPARE(QTextStream::Status(QTextStream::ReadCorruptData), obj1.status());
-
- // FieldAlignment QTextStream::fieldAlignment()
- // void QTextStream::setFieldAlignment(FieldAlignment)
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignLeft));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignLeft), obj1.fieldAlignment());
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignRight));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignRight), obj1.fieldAlignment());
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignCenter));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignCenter), obj1.fieldAlignment());
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignAccountingStyle));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignAccountingStyle), obj1.fieldAlignment());
-
- // QChar QTextStream::padChar()
- // void QTextStream::setPadChar(QChar)
- QChar var7 = 'Q';
- obj1.setPadChar(var7);
- QCOMPARE(var7, obj1.padChar());
- obj1.setPadChar(QChar());
- QCOMPARE(QChar(), obj1.padChar());
-
- // int QTextStream::fieldWidth()
- // void QTextStream::setFieldWidth(int)
- obj1.setFieldWidth(0);
- QCOMPARE(0, obj1.fieldWidth());
- obj1.setFieldWidth(INT_MIN);
- QCOMPARE(INT_MIN, obj1.fieldWidth());
- obj1.setFieldWidth(INT_MAX);
- QCOMPARE(INT_MAX, obj1.fieldWidth());
-
- // NumberFlags QTextStream::numberFlags()
- // void QTextStream::setNumberFlags(NumberFlags)
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ShowBase));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::ShowBase), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ForcePoint));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::ForcePoint), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ForceSign));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::ForceSign), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::UppercaseBase));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::UppercaseBase), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::UppercaseDigits));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::UppercaseDigits), obj1.numberFlags());
-
- // int QTextStream::integerBase()
- // void QTextStream::setIntegerBase(int)
- obj1.setIntegerBase(0);
- QCOMPARE(0, obj1.integerBase());
- obj1.setIntegerBase(INT_MIN);
- QCOMPARE(INT_MIN, obj1.integerBase());
- obj1.setIntegerBase(INT_MAX);
- QCOMPARE(INT_MAX, obj1.integerBase());
-
- // RealNumberNotation QTextStream::realNumberNotation()
- // void QTextStream::setRealNumberNotation(RealNumberNotation)
- obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::SmartNotation));
- QCOMPARE(QTextStream::RealNumberNotation(QTextStream::SmartNotation), obj1.realNumberNotation());
- obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::FixedNotation));
- QCOMPARE(QTextStream::RealNumberNotation(QTextStream::FixedNotation), obj1.realNumberNotation());
- obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::ScientificNotation));
- QCOMPARE(QTextStream::RealNumberNotation(QTextStream::ScientificNotation), obj1.realNumberNotation());
-
- // int QTextStream::realNumberPrecision()
- // void QTextStream::setRealNumberPrecision(int)
- obj1.setRealNumberPrecision(0);
- QCOMPARE(0, obj1.realNumberPrecision());
- obj1.setRealNumberPrecision(INT_MIN);
- QCOMPARE(6, obj1.realNumberPrecision()); // Setting a negative precision reverts it to the default value (6).
- obj1.setRealNumberPrecision(INT_MAX);
- QCOMPARE(INT_MAX, obj1.realNumberPrecision());
-}
-
-void tst_QTextStream::cleanup()
-{
- QCoreApplication::instance()->processEvents();
-}
-
-void tst_QTextStream::cleanupTestCase()
-{
-#ifdef BUILTIN_TESTDATA
- QDir::setCurrent(QCoreApplication::applicationDirPath());
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::construction()
-{
- QTextStream stream;
- QCOMPARE(stream.codec(), QTextCodec::codecForLocale());
- QCOMPARE(stream.device(), static_cast<QIODevice *>(0));
- QCOMPARE(stream.string(), static_cast<QString *>(0));
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- QVERIFY(stream.atEnd());
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- QCOMPARE(stream.readAll(), QString());
-
-}
-
-void tst_QTextStream::generateLineData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QStringList>("lines");
-
- // latin-1
- QTest::newRow("emptyer") << QByteArray() << QStringList();
- QTest::newRow("lf") << QByteArray("\n") << (QStringList() << "");
- QTest::newRow("crlf") << QByteArray("\r\n") << (QStringList() << "");
- QTest::newRow("oneline/nothing") << QByteArray("ole") << (QStringList() << "ole");
- QTest::newRow("oneline/lf") << QByteArray("ole\n") << (QStringList() << "ole");
- QTest::newRow("oneline/crlf") << QByteArray("ole\r\n") << (QStringList() << "ole");
- QTest::newRow("twolines/lf/lf") << QByteArray("ole\ndole\n") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/crlf/crlf") << QByteArray("ole\r\ndole\r\n") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/lf/crlf") << QByteArray("ole\ndole\r\n") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/lf/nothing") << QByteArray("ole\ndole") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/crlf/nothing") << QByteArray("ole\r\ndole") << (QStringList() << "ole" << "dole");
- QTest::newRow("threelines/lf/lf/lf") << QByteArray("ole\ndole\ndoffen\n") << (QStringList() << "ole" << "dole" << "doffen");
- QTest::newRow("threelines/crlf/crlf/crlf") << QByteArray("ole\r\ndole\r\ndoffen\r\n") << (QStringList() << "ole" << "dole" << "doffen");
- QTest::newRow("threelines/crlf/crlf/nothing") << QByteArray("ole\r\ndole\r\ndoffen") << (QStringList() << "ole" << "dole" << "doffen");
-
- if (!for_QString) {
- // utf-8
- QTest::newRow("utf8/twolines")
- << QByteArray("\xef\xbb\xbf"
- "\x66\x67\x65\x0a"
- "\x66\x67\x65\x0a", 11)
- << (QStringList() << "fge" << "fge");
-
- // utf-16
- // one line
- QTest::newRow("utf16-BE/nothing")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65", 8) << (QStringList() << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/nothing")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00", 8) << (QStringList() << QLatin1String("\345ge"));
- QTest::newRow("utf16-BE/lf")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 10) << (QStringList() << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/lf")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 10) << (QStringList() << QLatin1String("\345ge"));
-
- // two lines
- QTest::newRow("utf16-BE/twolines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 18)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/twolines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 18)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
-
- // three lines
- QTest::newRow("utf16-BE/threelines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 26)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge") << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/threelines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 26)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge") << QLatin1String("\345ge"));
-
- // utf-32
- QTest::newRow("utf32-BE/twolines")
- << QByteArray("\x00\x00\xfe\xff"
- "\x00\x00\x00\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a"
- "\x00\x00\x00\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a", 36)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
- QTest::newRow("utf32-LE/twolines")
- << QByteArray("\xff\xfe\x00\x00"
- "\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a\x00\x00\x00"
- "\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a\x00\x00\x00", 36)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
- }
-
- // partials
- QTest::newRow("cr") << QByteArray("\r") << (QStringList() << "");
- QTest::newRow("oneline/cr") << QByteArray("ole\r") << (QStringList() << "ole");
- if (!for_QString)
- QTest::newRow("utf16-BE/cr") << QByteArray("\xfe\xff\x00\xe5\x00\x67\x00\x65\x00\x0d", 10) << (QStringList() << QLatin1String("\345ge"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromDevice_data()
-{
- generateLineData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromDevice()
-{
- QFETCH(QByteArray, data);
- QFETCH(QStringList, lines);
-
- QFile::remove(testFileName);
- QFile file(testFileName);
- QVERIFY(file.open(QFile::ReadWrite));
- QCOMPARE(file.write(data), qlonglong(data.size()));
- QVERIFY(file.flush());
- file.seek(0);
-
- QTextStream stream(&file);
- QStringList list;
- while (!stream.atEnd())
- list << stream.readLine();
-
- QCOMPARE(list, lines);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineMaxlen_data()
-{
- QTest::addColumn<QString>("input");
- QTest::addColumn<QStringList>("lines");
-
- QTest::newRow("Hey")
- << QString("Hey")
- << (QStringList() << QString("Hey") << QString(""));
- QTest::newRow("Hey\\n")
- << QString("Hey\n")
- << (QStringList() << QString("Hey") << QString(""));
- QTest::newRow("HelloWorld")
- << QString("HelloWorld")
- << (QStringList() << QString("Hello") << QString("World"));
- QTest::newRow("Helo\\nWorlds")
- << QString("Helo\nWorlds")
- << (QStringList() << QString("Helo") << QString("World"));
- QTest::newRow("AAAAA etc.")
- << QString(16385, QLatin1Char('A'))
- << (QStringList() << QString("AAAAA") << QString("AAAAA"));
- QTest::newRow("multibyte string")
- << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242\341\233\232\341\232\240\n")
- << (QStringList() << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242")
- << QString::fromUtf8("\341\233\232\341\232\240"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineMaxlen()
-{
- QFETCH(QString, input);
- QFETCH(QStringList, lines);
- for (int i = 0; i < 2; ++i) {
- bool useDevice = (i == 1);
- QTextStream stream;
- QFile::remove("testfile");
- QFile file("testfile");
- if (useDevice) {
- file.open(QIODevice::ReadWrite);
- file.write(input.toUtf8());
- file.seek(0);
- stream.setDevice(&file);
- stream.setCodec("utf-8");
- } else {
- stream.setString(&input);
- }
-
- QStringList list;
- list << stream.readLine(5);
- list << stream.readLine(5);
-
- QCOMPARE(list, lines);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLinesFromBufferCRCR()
-{
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
- QByteArray data("0123456789\r\r\n");
-
- for (int i = 0; i < 10000; ++i)
- buffer.write(data);
-
- buffer.close();
- if (buffer.open(QIODevice::ReadOnly|QIODevice::Text)) {
- QTextStream stream(&buffer);
- while (!stream.atEnd())
- QCOMPARE(stream.readLine(), QString("0123456789"));
- }
-}
-
-class ErrorDevice : public QIODevice
-{
-protected:
- qint64 readData(char *data, qint64 maxlen) override
- {
- Q_UNUSED(data)
- Q_UNUSED(maxlen)
- return -1;
- }
-
- qint64 writeData(const char *data, qint64 len) override
- {
- Q_UNUSED(data)
- Q_UNUSED(len)
- return -1;
- }
-};
-
-void tst_QTextStream::readLineInto()
-{
- QByteArray data = "1\n2\n3";
-
- QTextStream ts(&data);
- QString line;
-
- ts.readLineInto(&line);
- QCOMPARE(line, QStringLiteral("1"));
-
- ts.readLineInto(nullptr, 0); // read the second line, but don't store it
-
- ts.readLineInto(&line);
- QCOMPARE(line, QStringLiteral("3"));
-
- QVERIFY(!ts.readLineInto(&line));
- QVERIFY(line.isEmpty());
-
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- ts.setDevice(&file);
- line.reserve(1);
- int maxLineCapacity = line.capacity();
-
- while (ts.readLineInto(&line)) {
- QVERIFY(line.capacity() >= maxLineCapacity);
- maxLineCapacity = line.capacity();
- }
-
- line = "Test string";
- ErrorDevice errorDevice;
- QVERIFY(errorDevice.open(QIODevice::ReadOnly));
- ts.setDevice(&errorDevice);
-
- QVERIFY(!ts.readLineInto(&line));
- QVERIFY(line.isEmpty());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromString_data()
-{
- generateLineData(true);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromString()
-{
- QFETCH(QByteArray, data);
- QFETCH(QStringList, lines);
-
- QString dataString = data;
-
- QTextStream stream(&dataString, QIODevice::ReadOnly);
- QStringList list;
- while (!stream.atEnd())
- list << stream.readLine();
-
- QCOMPARE(list, lines);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromStringThenChangeString()
-{
- QString first = "First string";
- QString second = "Second string";
-
- QTextStream stream(&first, QIODevice::ReadOnly);
- QString result = stream.readLine();
- QCOMPARE(first, result);
-
- stream.setString(&second, QIODevice::ReadOnly);
- result = stream.readLine();
- QCOMPARE(second, result);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::setDevice()
-{
- // Check that the read buffer is reset after setting a new device
- QByteArray data1("Hello World");
- QByteArray data2("How are you");
-
- QBuffer bufferOld(&data1);
- bufferOld.open(QIODevice::ReadOnly);
-
- QBuffer bufferNew(&data2);
- bufferNew.open(QIODevice::ReadOnly);
-
- QString text;
- QTextStream stream(&bufferOld);
- stream >> text;
- QCOMPARE(text, QString("Hello"));
-
- stream.setDevice(&bufferNew);
- stream >> text;
- QCOMPARE(text, QString("How"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromTextDevice_data()
-{
- generateLineData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromTextDevice()
-{
- QFETCH(QByteArray, data);
- QFETCH(QStringList, lines);
-
- for (int i = 0; i < 8; ++i) {
- QBuffer buffer(&data);
- if (i < 4)
- QVERIFY(buffer.open(QIODevice::ReadOnly | QIODevice::Text));
- else
- QVERIFY(buffer.open(QIODevice::ReadOnly));
-
- QTextStream stream(&buffer);
- QStringList list;
- while (!stream.atEnd()) {
- stream.pos(); // <- triggers side effects
- QString line;
-
- if (i & 1) {
- QChar c;
- while (!stream.atEnd()) {
- stream >> c;
- if (stream.status() == QTextStream::Ok) {
- if (c != QLatin1Char('\n') && c != QLatin1Char('\r'))
- line += c;
- if (c == QLatin1Char('\n'))
- break;
- }
- }
- } else {
- line = stream.readLine();
- }
-
- if ((i & 3) == 3 && !QString(QTest::currentDataTag()).contains("utf16"))
- stream.seek(stream.pos());
- list << line;
- }
- QCOMPARE(list, lines);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateAllData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QString>("output");
-
- // latin-1
- QTest::newRow("empty") << QByteArray() << QString();
- QTest::newRow("latin1-a") << QByteArray("a") << QString("a");
- QTest::newRow("latin1-a\\r") << QByteArray("a\r") << QString("a\r");
- QTest::newRow("latin1-a\\r\\n") << QByteArray("a\r\n") << QString("a\r\n");
- QTest::newRow("latin1-a\\n") << QByteArray("a\n") << QString("a\n");
-
- // utf-16
- if (!for_QString) {
- // one line
- QTest::newRow("utf16-BE/nothing")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65", 8) << QString::fromLatin1("\345ge");
- QTest::newRow("utf16-LE/nothing")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00", 8) << QString::fromLatin1("\345ge");
- QTest::newRow("utf16-BE/lf")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 10) << QString::fromLatin1("\345ge\n");
- QTest::newRow("utf16-LE/lf")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 10) << QString::fromLatin1("\345ge\n");
- QTest::newRow("utf16-BE/crlf")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0d\x00\x0a", 12) << QString::fromLatin1("\345ge\r\n");
- QTest::newRow("utf16-LE/crlf")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0d\x00\x0a\x00", 12) << QString::fromLatin1("\345ge\r\n");
-
- // two lines
- QTest::newRow("utf16-BE/twolines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 18)
- << QString::fromLatin1("\345ge\n\345ge\n");
- QTest::newRow("utf16-LE/twolines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 18)
- << QString::fromLatin1("\345ge\n\345ge\n");
-
- // three lines
- QTest::newRow("utf16-BE/threelines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 26)
- << QString::fromLatin1("\345ge\n\345ge\n\345ge\n");
- QTest::newRow("utf16-LE/threelines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 26)
- << QString::fromLatin1("\345ge\n\345ge\n\345ge\n");
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineUntilNull()
-{
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- QTextStream stream(&file);
- for (int i = 0; i < 15066; ++i) {
- QString line = stream.readLine();
- QVERIFY(!line.isNull());
- QVERIFY(!line.isNull());
- }
- QVERIFY(!stream.readLine().isNull());
- QVERIFY(stream.readLine().isNull());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromDevice_data()
-{
- generateAllData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
-
- QTextStream stream(&buffer);
- QCOMPARE(stream.readAll(), output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromString_data()
-{
- generateAllData(true);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromString()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, output);
-
- QString str = input;
-
- QTextStream stream(&str);
- QCOMPARE(stream.readAll(), output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::skipWhiteSpace_data()
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QChar>("output");
-
- // latin1
- QTest::newRow("empty") << QByteArray() << QChar('\0');
- QTest::newRow(" one") << QByteArray(" one") << QChar('o');
- QTest::newRow("\\none") << QByteArray("\none") << QChar('o');
- QTest::newRow("\\n one") << QByteArray("\n one") << QChar('o');
- QTest::newRow(" \\r\\n one") << QByteArray(" \r\n one") << QChar('o');
-
- // utf-16
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xfe\xff", 2) << QChar('\0');
- QTest::newRow("utf16-BE ( one)") << QByteArray("\xfe\xff\x00 \x00o\x00n\x00e", 10) << QChar('o');
- QTest::newRow("utf16-BE (\\none)") << QByteArray("\xfe\xff\x00\n\x00o\x00n\x00e", 10) << QChar('o');
- QTest::newRow("utf16-BE (\\n one)") << QByteArray("\xfe\xff\x00\n\x00 \x00o\x00n\x00e", 12) << QChar('o');
- QTest::newRow("utf16-BE ( \\r\\n one)") << QByteArray("\xfe\xff\x00 \x00\r\x00\n\x00 \x00o\x00n\x00e", 16) << QChar('o');
-
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xff\xfe", 2) << QChar('\0');
- QTest::newRow("utf16-LE ( one)") << QByteArray("\xff\xfe \x00o\x00n\x00e\x00", 10) << QChar('o');
- QTest::newRow("utf16-LE (\\none)") << QByteArray("\xff\xfe\n\x00o\x00n\x00e\x00", 10) << QChar('o');
- QTest::newRow("utf16-LE (\\n one)") << QByteArray("\xff\xfe\n\x00 \x00o\x00n\x00e\x00", 12) << QChar('o');
- QTest::newRow("utf16-LE ( \\r\\n one)") << QByteArray("\xff\xfe \x00\r\x00\n\x00 \x00o\x00n\x00e\x00", 16) << QChar('o');
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::skipWhiteSpace()
-{
- QFETCH(QByteArray, input);
- QFETCH(QChar, output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
-
- QTextStream stream(&buffer);
- stream.skipWhiteSpace();
-
- QChar tmp;
- stream >> tmp;
-
- QCOMPARE(tmp, output);
-
- QString str = input;
- QTextStream stream2(&input);
- stream2.skipWhiteSpace();
-
- stream2 >> tmp;
-
- QCOMPARE(tmp, output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::lineCount_data()
-{
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<int>("lineCount");
-
- QTest::newRow("empty") << QByteArray() << 0;
- QTest::newRow("oneline") << QByteArray("a\n") << 1;
- QTest::newRow("twolines") << QByteArray("a\nb\n") << 2;
- QTest::newRow("oneemptyline") << QByteArray("\n") << 1;
- QTest::newRow("twoemptylines") << QByteArray("\n\n") << 2;
- QTest::newRow("buffersize-1 line") << QByteArray(16382, '\n') << 16382;
- QTest::newRow("buffersize line") << QByteArray(16383, '\n') << 16383;
- QTest::newRow("buffersize+1 line") << QByteArray(16384, '\n') << 16384;
- QTest::newRow("buffersize+2 line") << QByteArray(16385, '\n') << 16385;
-
- QFile file(m_rfc3261FilePath); file.open(QFile::ReadOnly);
- QTest::newRow("rfc3261") << file.readAll() << 15067;
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::lineCount()
-{
- QFETCH(QByteArray, data);
- QFETCH(int, lineCount);
-
- QFile out("out.txt");
- out.open(QFile::WriteOnly);
-
- QTextStream lineReader(data);
- int lines = 0;
- while (!lineReader.atEnd()) {
- QString line = lineReader.readLine();
- out.write(line.toLatin1() + "\n");
- ++lines;
- }
-
- out.close();
- QCOMPARE(lines, lineCount);
-}
-
-// ------------------------------------------------------------------------------
-struct CompareIndicesForArray
-{
- int *array;
- CompareIndicesForArray(int *array) : array(array) {}
- bool operator() (const int i1, const int i2)
- {
- return array[i1] < array[i2];
- }
-};
-
-void tst_QTextStream::performance()
-{
- // Phase #1 - test speed of reading a huge text file with QFile.
- QTime stopWatch;
-
- const int N = 3;
- const char * readMethods[N] = {
- "QFile::readLine()",
- "QTextStream::readLine()",
- "QTextStream::readLine(QString *)"
- };
- int elapsed[N] = {0, 0, 0};
-
- stopWatch.restart();
- int nlines1 = 0;
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- while (!file.atEnd()) {
- ++nlines1;
- file.readLine();
- }
-
- elapsed[0] = stopWatch.elapsed();
- stopWatch.restart();
-
- int nlines2 = 0;
- QFile file2(m_rfc3261FilePath);
- QVERIFY(file2.open(QFile::ReadOnly));
-
- QTextStream stream(&file2);
- while (!stream.atEnd()) {
- ++nlines2;
- stream.readLine();
- }
-
- elapsed[1] = stopWatch.elapsed();
- stopWatch.restart();
-
- int nlines3 = 0;
- QFile file3(m_rfc3261FilePath);
- QVERIFY(file3.open(QFile::ReadOnly));
-
- QTextStream stream2(&file3);
- QString line;
- while (stream2.readLineInto(&line))
- ++nlines3;
-
- elapsed[2] = stopWatch.elapsed();
-
- QCOMPARE(nlines1, nlines2);
- QCOMPARE(nlines2, nlines3);
-
- for (int i = 0; i < N; i++) {
- qDebug("%s used %.3f seconds to read the file", readMethods[i],
- elapsed[i] / 1000.0);
- }
-
- int idx[N] = {0, 1, 2};
- std::sort(idx, idx + N, CompareIndicesForArray(elapsed));
-
- for (int i = 0; i < N-1; i++) {
- int i1 = idx[i];
- int i2 = idx[i+1];
- qDebug("Reading by %s is %.2fx faster than by %s",
- readMethods[i1],
- double(elapsed[i2]) / double(elapsed[i1]),
- readMethods[i2]);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::hexTest_data()
-{
- QTest::addColumn<qlonglong>("number");
- QTest::addColumn<QByteArray>("data");
-
- QTest::newRow("0") << Q_INT64_C(0) << QByteArray("0x0");
- QTest::newRow("1") << Q_INT64_C(1) << QByteArray("0x1");
- QTest::newRow("2") << Q_INT64_C(2) << QByteArray("0x2");
- QTest::newRow("3") << Q_INT64_C(3) << QByteArray("0x3");
- QTest::newRow("4") << Q_INT64_C(4) << QByteArray("0x4");
- QTest::newRow("5") << Q_INT64_C(5) << QByteArray("0x5");
- QTest::newRow("6") << Q_INT64_C(6) << QByteArray("0x6");
- QTest::newRow("7") << Q_INT64_C(7) << QByteArray("0x7");
- QTest::newRow("8") << Q_INT64_C(8) << QByteArray("0x8");
- QTest::newRow("9") << Q_INT64_C(9) << QByteArray("0x9");
- QTest::newRow("a") << Q_INT64_C(0xa) << QByteArray("0xa");
- QTest::newRow("b") << Q_INT64_C(0xb) << QByteArray("0xb");
- QTest::newRow("c") << Q_INT64_C(0xc) << QByteArray("0xc");
- QTest::newRow("d") << Q_INT64_C(0xd) << QByteArray("0xd");
- QTest::newRow("e") << Q_INT64_C(0xe) << QByteArray("0xe");
- QTest::newRow("f") << Q_INT64_C(0xf) << QByteArray("0xf");
- QTest::newRow("-1") << Q_INT64_C(-1) << QByteArray("-0x1");
- QTest::newRow("0xffffffff") << Q_INT64_C(0xffffffff) << QByteArray("0xffffffff");
- QTest::newRow("0xfffffffffffffffe") << Q_INT64_C(0xfffffffffffffffe) << QByteArray("-0x2");
- QTest::newRow("0xffffffffffffffff") << Q_INT64_C(0xffffffffffffffff) << QByteArray("-0x1");
- QTest::newRow("0x7fffffffffffffff") << Q_INT64_C(0x7fffffffffffffff) << QByteArray("0x7fffffffffffffff");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::hexTest()
-{
- QFETCH(qlonglong, number);
- QFETCH(QByteArray, data);
-
- QByteArray array;
- QTextStream stream(&array);
-
- stream << showbase << hex << number;
- stream.flush();
- QCOMPARE(array, data);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::binTest_data()
-{
- QTest::addColumn<int>("number");
- QTest::addColumn<QByteArray>("data");
-
- QTest::newRow("0") << 0 << QByteArray("0b0");
- QTest::newRow("1") << 1 << QByteArray("0b1");
- QTest::newRow("2") << 2 << QByteArray("0b10");
- QTest::newRow("5") << 5 << QByteArray("0b101");
- QTest::newRow("-1") << -1 << QByteArray("-0b1");
- QTest::newRow("11111111") << 0xff << QByteArray("0b11111111");
- QTest::newRow("1111111111111111") << 0xffff << QByteArray("0b1111111111111111");
- QTest::newRow("1111111011111110") << 0xfefe << QByteArray("0b1111111011111110");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::binTest()
-{
- QFETCH(int, number);
- QFETCH(QByteArray, data);
-
- QByteArray array;
- QTextStream stream(&array);
-
- stream << showbase << bin << number;
- stream.flush();
- QCOMPARE(array.constData(), data.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::octTest_data()
-{
- QTest::addColumn<int>("number");
- QTest::addColumn<QByteArray>("data");
-
- QTest::newRow("0") << 0 << QByteArray("00");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::octTest()
-{
- QFETCH(int, number);
- QFETCH(QByteArray, data);
-
- QByteArray array;
- QTextStream stream(&array);
-
- stream << showbase << oct << number;
- stream.flush();
- QCOMPARE(array, data);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::zeroTermination()
-{
- QTextStream stream;
- char c = '@';
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- stream >> c;
- QCOMPARE(c, '\0');
-
- c = '@';
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- stream >> &c;
- QCOMPARE(c, '\0');
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::ws_manipulator()
-{
- {
- QString string = "a b c d";
- QTextStream stream(&string);
-
- char a, b, c, d;
- stream >> a >> b >> c >> d;
- QCOMPARE(a, 'a');
- QCOMPARE(b, ' ');
- QCOMPARE(c, 'b');
- QCOMPARE(d, ' ');
- }
- {
- QString string = "a b c d";
- QTextStream stream(&string);
-
- char a, b, c, d;
- stream >> a >> ws >> b >> ws >> c >> ws >> d;
- QCOMPARE(a, 'a');
- QCOMPARE(b, 'b');
- QCOMPARE(c, 'c');
- QCOMPARE(d, 'd');
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::stillOpenWhenAtEnd()
-{
- QFile file(QFINDTESTDATA("tst_qtextstream.cpp"));
- QVERIFY(file.open(QFile::ReadOnly));
-
- QTextStream stream(&file);
- while (!stream.readLine().isNull()) {}
- QVERIFY(file.isOpen());
-
- if (!QtNetworkSettings::verifyTestNetworkSettings())
- QSKIP("No network test server available");
-
- QTcpSocket socket;
- socket.connectToHost(QtNetworkSettings::serverName(), 143);
- QVERIFY(socket.waitForReadyRead(5000));
-
- QTextStream stream2(&socket);
- while (!stream2.readLine().isNull()) {}
- QVERIFY(socket.isOpen());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readNewlines_data()
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QString>("output");
-
- QTest::newRow("empty") << QByteArray() << QString();
- QTest::newRow("\\r\\n") << QByteArray("\r\n") << QString("\n");
- QTest::newRow("\\r\\r\\n") << QByteArray("\r\r\n") << QString("\n");
- QTest::newRow("\\r\\n\\r\\n") << QByteArray("\r\n\r\n") << QString("\n\n");
- QTest::newRow("\\n") << QByteArray("\n") << QString("\n");
- QTest::newRow("\\n\\n") << QByteArray("\n\n") << QString("\n\n");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readNewlines()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly | QBuffer::Text);
- QTextStream stream(&buffer);
- QCOMPARE(stream.readAll(), output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::seek()
-{
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- QTextStream stream(&file);
- QString tmp;
- stream >> tmp;
- QCOMPARE(tmp, QString::fromLatin1("Network"));
-
- // QTextStream::seek(0) should both clear its internal read/write buffers
- // and seek the device.
- for (int i = 0; i < 4; ++i) {
- stream.seek(12 + i);
- stream >> tmp;
- QCOMPARE(tmp, QString("Network").mid(i));
- }
- for (int i = 0; i < 4; ++i) {
- stream.seek(16 - i);
- stream >> tmp;
- QCOMPARE(tmp, QString("Network").mid(4 - i));
- }
- stream.seek(139181);
- stream >> tmp;
- QCOMPARE(tmp, QString("information"));
- stream.seek(388683);
- stream >> tmp;
- QCOMPARE(tmp, QString("telephone"));
-
- // Also test this with a string
- QString words = QLatin1String("thisisa");
- QTextStream stream2(&words, QIODevice::ReadOnly);
- stream2 >> tmp;
- QCOMPARE(tmp, QString::fromLatin1("thisisa"));
-
- for (int i = 0; i < 4; ++i) {
- stream2.seek(i);
- stream2 >> tmp;
- QCOMPARE(tmp, QString("thisisa").mid(i));
- }
- for (int i = 0; i < 4; ++i) {
- stream2.seek(4 - i);
- stream2 >> tmp;
- QCOMPARE(tmp, QString("thisisa").mid(4 - i));
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::pos()
-{
- {
- // Strings
- QString str("this is a test");
- QTextStream stream(&str, QIODevice::ReadWrite);
-
- QCOMPARE(stream.pos(), qint64(0));
- for (int i = 0; i <= str.size(); ++i) {
- QVERIFY(stream.seek(i));
- QCOMPARE(stream.pos(), qint64(i));
- }
- for (int j = str.size(); j >= 0; --j) {
- QVERIFY(stream.seek(j));
- QCOMPARE(stream.pos(), qint64(j));
- }
-
- QVERIFY(stream.seek(0));
-
- QChar ch;
- stream >> ch;
- QCOMPARE(ch, QChar('t'));
-
- QCOMPARE(stream.pos(), qint64(1));
- QVERIFY(stream.seek(1));
- QCOMPARE(stream.pos(), qint64(1));
- QVERIFY(stream.seek(0));
-
- QString strtmp;
- stream >> strtmp;
- QCOMPARE(strtmp, QString("this"));
-
- QCOMPARE(stream.pos(), qint64(4));
- stream.seek(0);
- stream.seek(4);
-
- stream >> ch;
- QCOMPARE(ch, QChar(' '));
- QCOMPARE(stream.pos(), qint64(5));
-
- stream.seek(10);
- stream >> strtmp;
- QCOMPARE(strtmp, QString("test"));
- QCOMPARE(stream.pos(), qint64(14));
- }
- {
- // Latin1 device
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QIODevice::ReadOnly));
-
- QTextStream stream(&file);
-
- QCOMPARE(stream.pos(), qint64(0));
-
- for (int i = 0; i <= file.size(); i += 7) {
- QVERIFY(stream.seek(i));
- QCOMPARE(stream.pos(), qint64(i));
- }
- for (int j = file.size(); j >= 0; j -= 7) {
- QVERIFY(stream.seek(j));
- QCOMPARE(stream.pos(), qint64(j));
- }
-
- stream.seek(0);
-
- QString strtmp;
- stream >> strtmp;
- QCOMPARE(strtmp, QString("Network"));
- QCOMPARE(stream.pos(), qint64(19));
-
- stream.seek(2598);
- QCOMPARE(stream.pos(), qint64(2598));
- stream >> strtmp;
- QCOMPARE(stream.pos(), qint64(2607));
- QCOMPARE(strtmp, QString("locations"));
- }
- {
- // Shift-JIS device
- for (int i = 0; i < 2; ++i) {
- QFile file(m_shiftJisFilePath);
- if (i == 0)
- QVERIFY(file.open(QIODevice::ReadOnly));
- else
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
-
- QTextStream stream(&file);
- stream.setCodec("Shift-JIS");
- QVERIFY(stream.codec());
-
- QCOMPARE(stream.pos(), qint64(0));
- for (int i = 0; i <= file.size(); i += 7) {
- QVERIFY(stream.seek(i));
- QCOMPARE(stream.pos(), qint64(i));
- }
- for (int j = file.size(); j >= 0; j -= 7) {
- QVERIFY(stream.seek(j));
- QCOMPARE(stream.pos(), qint64(j));
- }
-
- stream.seek(2089);
- QString strtmp;
- stream >> strtmp;
- QCOMPARE(strtmp, QString("AUnicode"));
- QCOMPARE(stream.pos(), qint64(2097));
-
- stream.seek(43325);
- stream >> strtmp;
- QCOMPARE(strtmp, QString("Shift-JIS"));
- stream >> strtmp;
- QCOMPARE(strtmp, QString::fromUtf8("\343\201\247\346\233\270\343\201\213\343\202\214\343\201\237"));
- QCOMPARE(stream.pos(), qint64(43345));
- stream >> strtmp;
- QCOMPARE(strtmp, QString("POD"));
- QCOMPARE(stream.pos(), qint64(43349));
- }
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::pos2()
-{
- QByteArray data("abcdef\r\nghijkl\r\n");
- QBuffer buffer(&data);
- QVERIFY(buffer.open(QIODevice::ReadOnly | QIODevice::Text));
-
- QTextStream stream(&buffer);
-
- QChar ch;
-
- QCOMPARE(stream.pos(), qint64(0));
- stream >> ch;
- QCOMPARE(ch, QChar('a'));
- QCOMPARE(stream.pos(), qint64(1));
-
- QString str;
- stream >> str;
- QCOMPARE(str, QString("bcdef"));
- QCOMPARE(stream.pos(), qint64(6));
-
- stream >> str;
- QCOMPARE(str, QString("ghijkl"));
- QCOMPARE(stream.pos(), qint64(14));
-
- // Seek back and try again
- stream.seek(1);
- QCOMPARE(stream.pos(), qint64(1));
- stream >> str;
- QCOMPARE(str, QString("bcdef"));
- QCOMPARE(stream.pos(), qint64(6));
-
- stream.seek(6);
- stream >> str;
- QCOMPARE(str, QString("ghijkl"));
- QCOMPARE(stream.pos(), qint64(14));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::pos3LargeFile()
-{
- {
- QFile file(testFileName);
- file.open(QIODevice::WriteOnly | QIODevice::Text);
- QTextStream out( &file );
- // NOTE: The unusual spacing is to ensure non-1-character whitespace.
- QString lineString = " 0 1 2\t3 4\t \t5 6 7 8 9 \n";
- // Approximate 50kb text file
- const int NbLines = (50*1024) / lineString.length() + 1;
- for (int line = 0; line < NbLines; ++line)
- out << lineString;
- // File is automatically flushed and closed on destruction.
- }
- QFile file(testFileName);
- file.open(QIODevice::ReadOnly | QIODevice::Text);
- QTextStream in( &file );
- const int testValues[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- int value;
- while (true) {
- in.pos();
- for ( int i = 0; i < 10; ++i ) {
- in >> value;
- if (in.status() != QTextStream::Ok) {
- // End case, i == 0 && eof reached.
- QCOMPARE(i, 0);
- QCOMPARE(in.status(), QTextStream::ReadPastEnd);
- return;
- }
- QCOMPARE(value, testValues[i]);
- }
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readStdin()
-{
-#if !QT_CONFIG(process)
- QSKIP("No qprocess support", SkipAll);
-#else
- QProcess stdinProcess;
- stdinProcess.start("stdinProcess/stdinProcess");
- stdinProcess.setReadChannel(QProcess::StandardError);
-
- QTextStream stream(&stdinProcess);
- stream << "1" << endl;
- stream << "2" << endl;
- stream << "3" << endl;
-
- stdinProcess.closeWriteChannel();
-
- QVERIFY(stdinProcess.waitForFinished(5000));
-
- int a, b, c;
- stream >> a >> b >> c;
- QCOMPARE(a, 1);
- QCOMPARE(b, 2);
- QCOMPARE(c, 3);
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromStdin()
-{
-#if !QT_CONFIG(process)
- QSKIP("No qprocess support", SkipAll);
-#else
- QProcess stdinProcess;
- stdinProcess.start("readAllStdinProcess/readAllStdinProcess", QIODevice::ReadWrite | QIODevice::Text);
- stdinProcess.setReadChannel(QProcess::StandardError);
-
- QTextStream stream(&stdinProcess);
- stream.setCodec("ISO-8859-1");
- stream << "hello world" << flush;
-
- stdinProcess.closeWriteChannel();
-
- QVERIFY(stdinProcess.waitForFinished(5000));
- QCOMPARE(stream.readAll(), QString::fromLatin1("hello world\n"));
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromStdin()
-{
-#if !QT_CONFIG(process)
- QSKIP("No qprocess support", SkipAll);
-#else
- QProcess stdinProcess;
- stdinProcess.start("readLineStdinProcess/readLineStdinProcess", QIODevice::ReadWrite | QIODevice::Text);
- stdinProcess.setReadChannel(QProcess::StandardError);
-
- stdinProcess.write("abc\n");
- QVERIFY(stdinProcess.waitForReadyRead(5000));
- QCOMPARE(stdinProcess.readAll().data(), QByteArray("abc").data());
-
- stdinProcess.write("def\n");
- QVERIFY(stdinProcess.waitForReadyRead(5000));
- QCOMPARE(stdinProcess.readAll(), QByteArray("def"));
-
- stdinProcess.closeWriteChannel();
-
- QVERIFY(stdinProcess.waitForFinished(5000));
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::read()
-{
- {
- QFile::remove("testfile");
- QFile file("testfile");
- file.open(QFile::WriteOnly);
- file.write("4.15 abc ole");
- file.close();
-
- QVERIFY(file.open(QFile::ReadOnly));
- QTextStream stream(&file);
- QCOMPARE(stream.read(0), QString(""));
- QCOMPARE(stream.read(4), QString("4.15"));
- QCOMPARE(stream.read(4), QString(" abc"));
- stream.seek(1);
- QCOMPARE(stream.read(4), QString(".15 "));
- stream.seek(1);
- QCOMPARE(stream.read(4), QString(".15 "));
- stream.seek(2);
- QCOMPARE(stream.read(4), QString("15 a"));
- // ### add tests for reading \r\n etc..
- }
-
- {
- // File larger than QTEXTSTREAM_BUFFERSIZE
- QFile::remove("testfile");
- QFile file("testfile");
- file.open(QFile::WriteOnly);
- for (int i = 0; i < 16384 / 8; ++i)
- file.write("01234567");
- file.write("0");
- file.close();
-
- QVERIFY(file.open(QFile::ReadOnly));
- QTextStream stream(&file);
- QCOMPARE(stream.read(10), QString("0123456701"));
- QCOMPARE(stream.read(10), QString("2345670123"));
- QCOMPARE(stream.readAll().size(), 16385-20);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::qbool()
-{
- QString s;
- QTextStream stream(&s);
- stream << s.contains(QString("hei"));
- QCOMPARE(s, QString("0"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::forcePoint()
-{
- QString str;
- QTextStream stream(&str);
- stream << fixed << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
- QCOMPARE(str, QString("1.000000 1 0 -1.000000 -1"));
-
- str.clear();
- stream.seek(0);
- stream << scientific << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
- QCOMPARE(str, QString("1.000000e+00 1 0 -1.000000e+00 -1"));
-
- str.clear();
- stream.seek(0);
- stream.setRealNumberNotation(QTextStream::SmartNotation);
- stream << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
- QCOMPARE(str, QString("1.00000 1 0 -1.00000 -1"));
-
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::forceSign()
-{
- QString str;
- QTextStream stream(&str);
- stream << forcesign << 1.2 << ' ' << -1.2 << ' ' << 0;
- QCOMPARE(str, QString("+1.2 -1.2 +0"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::read0d0d0a()
-{
- QFile file("task113817.txt");
- file.open(QIODevice::ReadOnly | QIODevice::Text);
-
- QTextStream stream(&file);
- while (!stream.atEnd())
- stream.readLine();
-}
-
-// ------------------------------------------------------------------------------
-
-Q_DECLARE_METATYPE(QTextStreamFunction);
-
-QTextStream &noop(QTextStream &s) { return s; }
-
-void tst_QTextStream::numeralCase_data()
-{
- QTextStreamFunction noop_ = noop;
- QTextStreamFunction bin_ = bin;
- QTextStreamFunction oct_ = oct;
- QTextStreamFunction hex_ = hex;
- QTextStreamFunction base = showbase;
- QTextStreamFunction ucb = uppercasebase;
- QTextStreamFunction lcb = lowercasebase;
- QTextStreamFunction ucd = uppercasedigits;
- QTextStreamFunction lcd = lowercasedigits;
-
- QTest::addColumn<QTextStreamFunction>("func1");
- QTest::addColumn<QTextStreamFunction>("func2");
- QTest::addColumn<QTextStreamFunction>("func3");
- QTest::addColumn<QTextStreamFunction>("func4");
- QTest::addColumn<int>("value");
- QTest::addColumn<QString>("expected");
- QTest::newRow("dec 1") << noop_ << noop_ << noop_ << noop_ << 31 << "31";
- QTest::newRow("dec 2") << noop_ << base << noop_ << noop_ << 31 << "31";
-
- QTest::newRow("hex 1") << hex_ << noop_ << noop_ << noop_ << 31 << "1f";
- QTest::newRow("hex 2") << hex_ << noop_ << noop_ << lcd << 31 << "1f";
- QTest::newRow("hex 3") << hex_ << noop_ << ucb << noop_ << 31 << "1f";
- QTest::newRow("hex 4") << hex_ << noop_ << noop_ << ucd << 31 << "1F";
- QTest::newRow("hex 5") << hex_ << noop_ << lcb << ucd << 31 << "1F";
- QTest::newRow("hex 6") << hex_ << noop_ << ucb << ucd << 31 << "1F";
- QTest::newRow("hex 7") << hex_ << base << noop_ << noop_ << 31 << "0x1f";
- QTest::newRow("hex 8") << hex_ << base << lcb << lcd << 31 << "0x1f";
- QTest::newRow("hex 9") << hex_ << base << ucb << noop_ << 31 << "0X1f";
- QTest::newRow("hex 10") << hex_ << base << ucb << lcd << 31 << "0X1f";
- QTest::newRow("hex 11") << hex_ << base << noop_ << ucd << 31 << "0x1F";
- QTest::newRow("hex 12") << hex_ << base << lcb << ucd << 31 << "0x1F";
- QTest::newRow("hex 13") << hex_ << base << ucb << ucd << 31 << "0X1F";
-
- QTest::newRow("bin 1") << bin_ << noop_ << noop_ << noop_ << 31 << "11111";
- QTest::newRow("bin 2") << bin_ << base << noop_ << noop_ << 31 << "0b11111";
- QTest::newRow("bin 3") << bin_ << base << lcb << noop_ << 31 << "0b11111";
- QTest::newRow("bin 4") << bin_ << base << ucb << noop_ << 31 << "0B11111";
- QTest::newRow("bin 5") << bin_ << base << noop_ << ucd << 31 << "0b11111";
- QTest::newRow("bin 6") << bin_ << base << lcb << ucd << 31 << "0b11111";
- QTest::newRow("bin 7") << bin_ << base << ucb << ucd << 31 << "0B11111";
-
- QTest::newRow("oct 1") << oct_ << noop_ << noop_ << noop_ << 31 << "37";
- QTest::newRow("oct 2") << oct_ << base << noop_ << noop_ << 31 << "037";
-}
-
-void tst_QTextStream::numeralCase()
-{
- QFETCH(QTextStreamFunction, func1);
- QFETCH(QTextStreamFunction, func2);
- QFETCH(QTextStreamFunction, func3);
- QFETCH(QTextStreamFunction, func4);
- QFETCH(int, value);
- QFETCH(QString, expected);
-
- QString str;
- QTextStream stream(&str);
- stream << func1 << func2 << func3 << func4 << value;
- QCOMPARE(str, expected);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::nanInf()
-{
- // Cannot use test data in this function, as comparing nans and infs isn't
- // well defined.
- QString str("nan NAN nAn +nan +NAN +nAn -nan -NAN -nAn"
- " inf INF iNf +inf +INF +iNf -inf -INF -iNf");
-
- QTextStream stream(&str);
-
- double tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
-
- stream.seek(0);
-
- float tmpF = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0);
-
- QString s;
- QTextStream out(&s);
- out << qInf() << ' ' << -qInf() << ' ' << qQNaN()
- << uppercasedigits << ' '
- << qInf() << ' ' << -qInf() << ' ' << qQNaN()
- << flush;
-
- QCOMPARE(s, QString("inf -inf nan INF -INF NAN"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::utf8IncompleteAtBufferBoundary_data()
-{
- QTest::addColumn<bool>("useLocale");
-
- QTest::newRow("utf8") << false;
-
- // is this locale UTF-8?
- if (QString(QChar::ReplacementCharacter).toLocal8Bit() == "\xef\xbf\xbd")
- QTest::newRow("locale") << true;
-}
-
-void tst_QTextStream::utf8IncompleteAtBufferBoundary()
-{
- QFile::remove(testFileName);
- QFile data(testFileName);
-
- QTextCodec *utf8Codec = QTextCodec::codecForMib(106);
- QString lineContents = QString::fromUtf8("\342\200\223" // U+2013 EN DASH
- "\342\200\223"
- "\342\200\223"
- "\342\200\223"
- "\342\200\223"
- "\342\200\223");
-
- data.open(QFile::WriteOnly | QFile::Truncate);
- {
- QTextStream out(&data);
- out.setCodec(utf8Codec);
- out.setFieldWidth(3);
-
- for (int i = 0; i < 1000; ++i) {
- out << i << lineContents << endl;
- }
- }
- data.close();
-
- data.open(QFile::ReadOnly);
- QTextStream in(&data);
-
- QFETCH(bool, useLocale);
- if (!useLocale)
- in.setCodec(utf8Codec); // QUtf8Codec
- else
- in.setCodec(QTextCodec::codecForLocale());
-
- int i = 0;
- do {
- QString line = in.readLine().trimmed();
- ++i;
- QVERIFY2(line.endsWith(lineContents), QString("Line %1: %2").arg(i).arg(line).toLocal8Bit());
- } while (!in.atEnd());
-}
-
-// ------------------------------------------------------------------------------
-
-// Make sure we don't write a BOM after seek()ing
-
-void tst_QTextStream::writeSeekWriteNoBOM()
-{
-
- //First with the default codec (normally either latin-1 or UTF-8)
-
- QBuffer out;
- out.open(QIODevice::WriteOnly);
- QTextStream stream(&out);
-
- int number = 0;
- QString sizeStr = QLatin1String("Size=")
- + QString::number(number).rightJustified(10, QLatin1Char('0'));
- stream << sizeStr << endl;
- stream << "Version=" << QString::number(14) << endl;
- stream << "blah blah blah" << endl;
- stream.flush();
-
- QCOMPARE(out.buffer().constData(), "Size=0000000000\nVersion=14\nblah blah blah\n");
-
- // Now overwrite the size header item
- number = 42;
- stream.seek(0);
- sizeStr = QLatin1String("Size=")
- + QString::number(number).rightJustified(10, QLatin1Char('0'));
- stream << sizeStr << endl;
- stream.flush();
-
- // Check buffer is still OK
- QCOMPARE(out.buffer().constData(), "Size=0000000042\nVersion=14\nblah blah blah\n");
-
-
- //Then UTF-16
-
- QBuffer out16;
- out16.open(QIODevice::WriteOnly);
- QTextStream stream16(&out16);
- stream16.setCodec("UTF-16");
-
- stream16 << "one" << "two" << QLatin1String("three");
- stream16.flush();
-
- // save that output
- QByteArray first = out16.buffer();
-
- stream16.seek(0);
- stream16 << "one";
- stream16.flush();
-
- QCOMPARE(out16.buffer(), first);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateOperatorCharData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QChar>("qchar_output");
- QTest::addColumn<char>("char_output");
- QTest::addColumn<QByteArray>("write_output");
-
- QTest::newRow("empty") << QByteArray() << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("a") << QByteArray("a") << QChar('a') << 'a' << QByteArray("a");
- QTest::newRow("\\na") << QByteArray("\na") << QChar('\n') << '\n' << QByteArray("\n");
- QTest::newRow("\\0") << QByteArray("\0") << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("\\xff") << QByteArray("\xff") << QChar('\xff') << '\xff' << QByteArray("\xff");
- QTest::newRow("\\xfe") << QByteArray("\xfe") << QChar('\xfe') << '\xfe' << QByteArray("\xfe");
-
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("utf16-BE (a)") << QByteArray("\xff\xfe\x61\x00", 4) << QChar('a') << 'a' << QByteArray("a");
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("utf16-LE (a)") << QByteArray("\xfe\xff\x00\x61", 4) << QChar('a') << 'a' << QByteArray("a");
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::QChar_operators_FromDevice_data()
-{
- generateOperatorCharData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::QChar_operators_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QChar, qchar_output);
- QFETCH(QByteArray, write_output);
-
- QBuffer buf(&input);
- buf.open(QBuffer::ReadOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- QChar tmp;
- stream >> tmp;
- QCOMPARE(tmp, qchar_output);
-
- QBuffer writeBuf;
- writeBuf.open(QBuffer::WriteOnly);
-
- QTextStream writeStream(&writeBuf);
- writeStream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- writeStream << qchar_output;
- writeStream.flush();
-
- QCOMPARE(writeBuf.buffer().size(), write_output.size());
- QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::char_operators_FromDevice_data()
-{
- generateOperatorCharData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::char_operators_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(char, char_output);
- QFETCH(QByteArray, write_output);
-
- QBuffer buf(&input);
- buf.open(QBuffer::ReadOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- char tmp;
- stream >> tmp;
- QCOMPARE(tmp, char_output);
-
- QBuffer writeBuf;
- writeBuf.open(QBuffer::WriteOnly);
-
- QTextStream writeStream(&writeBuf);
- writeStream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- writeStream << char_output;
- writeStream.flush();
-
- QCOMPARE(writeBuf.buffer().size(), write_output.size());
- QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateNaturalNumbersData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<qulonglong>("output");
-
- QTest::newRow("empty") << QByteArray() << qulonglong(0);
- QTest::newRow("a") << QByteArray("a") << qulonglong(0);
- QTest::newRow(" ") << QByteArray(" ") << qulonglong(0);
- QTest::newRow("0") << QByteArray("0") << qulonglong(0);
- QTest::newRow("1") << QByteArray("1") << qulonglong(1);
- QTest::newRow("12") << QByteArray("12") << qulonglong(12);
- QTest::newRow("-12") << QByteArray("-12") << qulonglong(-12);
- QTest::newRow("-0") << QByteArray("-0") << qulonglong(0);
- QTest::newRow(" 1") << QByteArray(" 1") << qulonglong(1);
- QTest::newRow(" \\r\\n\\r\\n123") << QByteArray(" \r\n\r\n123") << qulonglong(123);
-
- // bit boundary tests
- QTest::newRow("127") << QByteArray("127") << qulonglong(127);
- QTest::newRow("128") << QByteArray("128") << qulonglong(128);
- QTest::newRow("129") << QByteArray("129") << qulonglong(129);
- QTest::newRow("-127") << QByteArray("-127") << qulonglong(-127);
- QTest::newRow("-128") << QByteArray("-128") << qulonglong(-128);
- QTest::newRow("-129") << QByteArray("-129") << qulonglong(-129);
- QTest::newRow("32767") << QByteArray("32767") << qulonglong(32767);
- QTest::newRow("32768") << QByteArray("32768") << qulonglong(32768);
- QTest::newRow("32769") << QByteArray("32769") << qulonglong(32769);
- QTest::newRow("-32767") << QByteArray("-32767") << qulonglong(-32767);
- QTest::newRow("-32768") << QByteArray("-32768") << qulonglong(-32768);
- QTest::newRow("-32769") << QByteArray("-32769") << qulonglong(-32769);
- QTest::newRow("65537") << QByteArray("65537") << qulonglong(65537);
- QTest::newRow("65536") << QByteArray("65536") << qulonglong(65536);
- QTest::newRow("65535") << QByteArray("65535") << qulonglong(65535);
- QTest::newRow("-65537") << QByteArray("-65537") << qulonglong(-65537);
- QTest::newRow("-65536") << QByteArray("-65536") << qulonglong(-65536);
- QTest::newRow("-65535") << QByteArray("-65535") << qulonglong(-65535);
- QTest::newRow("2147483646") << QByteArray("2147483646") << qulonglong(2147483646);
- QTest::newRow("2147483647") << QByteArray("2147483647") << qulonglong(2147483647);
- QTest::newRow("2147483648") << QByteArray("2147483648") << Q_UINT64_C(2147483648);
- QTest::newRow("-2147483646") << QByteArray("-2147483646") << qulonglong(-2147483646);
- QTest::newRow("-2147483647") << QByteArray("-2147483647") << qulonglong(-2147483647);
- QTest::newRow("-2147483648") << QByteArray("-2147483648") << quint64(-2147483648LL);
- QTest::newRow("4294967296") << QByteArray("4294967296") << Q_UINT64_C(4294967296);
- QTest::newRow("4294967297") << QByteArray("4294967297") << Q_UINT64_C(4294967297);
- QTest::newRow("4294967298") << QByteArray("4294967298") << Q_UINT64_C(4294967298);
- QTest::newRow("-4294967296") << QByteArray("-4294967296") << quint64(-4294967296);
- QTest::newRow("-4294967297") << QByteArray("-4294967297") << quint64(-4294967297);
- QTest::newRow("-4294967298") << QByteArray("-4294967298") << quint64(-4294967298);
- QTest::newRow("9223372036854775807") << QByteArray("9223372036854775807") << Q_UINT64_C(9223372036854775807);
- QTest::newRow("9223372036854775808") << QByteArray("9223372036854775808") << Q_UINT64_C(9223372036854775808);
- QTest::newRow("9223372036854775809") << QByteArray("9223372036854775809") << Q_UINT64_C(9223372036854775809);
- QTest::newRow("18446744073709551615") << QByteArray("18446744073709551615") << Q_UINT64_C(18446744073709551615);
- QTest::newRow("18446744073709551616") << QByteArray("18446744073709551616") << Q_UINT64_C(0);
- QTest::newRow("18446744073709551617") << QByteArray("18446744073709551617") << Q_UINT64_C(1);
- // 18446744073709551617 bytes should be enough for anyone.... ;-)
-
- // hex tests
- QTest::newRow("0x0") << QByteArray("0x0") << qulonglong(0);
- QTest::newRow("0x") << QByteArray("0x") << qulonglong(0);
- QTest::newRow("0x1") << QByteArray("0x1") << qulonglong(1);
- QTest::newRow("0xf") << QByteArray("0xf") << qulonglong(15);
- QTest::newRow("0xdeadbeef") << QByteArray("0xdeadbeef") << Q_UINT64_C(3735928559);
- QTest::newRow("0XDEADBEEF") << QByteArray("0XDEADBEEF") << Q_UINT64_C(3735928559);
- QTest::newRow("0xdeadbeefZzzzz") << QByteArray("0xdeadbeefZzzzz") << Q_UINT64_C(3735928559);
- QTest::newRow(" 0xdeadbeefZzzzz") << QByteArray(" 0xdeadbeefZzzzz") << Q_UINT64_C(3735928559);
-
- // oct tests
- QTest::newRow("00") << QByteArray("00") << qulonglong(0);
- QTest::newRow("0141") << QByteArray("0141") << qulonglong(97);
- QTest::newRow("01419999") << QByteArray("01419999") << qulonglong(97);
- QTest::newRow(" 01419999") << QByteArray(" 01419999") << qulonglong(97);
-
- // bin tests
- QTest::newRow("0b0") << QByteArray("0b0") << qulonglong(0);
- QTest::newRow("0b1") << QByteArray("0b1") << qulonglong(1);
- QTest::newRow("0b10") << QByteArray("0b10") << qulonglong(2);
- QTest::newRow("0B10") << QByteArray("0B10") << qulonglong(2);
- QTest::newRow("0b101010") << QByteArray("0b101010") << qulonglong(42);
- QTest::newRow("0b1010102345") << QByteArray("0b1010102345") << qulonglong(42);
- QTest::newRow(" 0b1010102345") << QByteArray(" 0b1010102345") << qulonglong(42);
-
- // utf-16 tests
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xfe\xff", 2) << qulonglong(0);
- QTest::newRow("utf16-BE (0xdeadbeef)")
- << QByteArray("\xfe\xff"
- "\x00\x30\x00\x78\x00\x64\x00\x65\x00\x61\x00\x64\x00\x62\x00\x65\x00\x65\x00\x66", 22)
- << Q_UINT64_C(3735928559);
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xff\xfe", 2) << Q_UINT64_C(0);
- QTest::newRow("utf16-LE (0xdeadbeef)")
- << QByteArray("\xff\xfe"
- "\x30\x00\x78\x00\x64\x00\x65\x00\x61\x00\x64\x00\x62\x00\x65\x00\x65\x00\x66\x00", 22)
- << Q_UINT64_C(3735928559);
- }
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_read_operator_FromDevice_data() \
- { generateNaturalNumbersData(false); } \
- void tst_QTextStream:: texttype##_read_operator_FromDevice() \
- { \
- QFETCH(QByteArray, input); \
- QFETCH(qulonglong, output); \
- type sh; \
- QTextStream stream(&input); \
- stream >> sh; \
- QCOMPARE(sh, (type)output); \
- }
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(signedShort, signed short)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(unsignedShort, unsigned short)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(signedInt, signed int)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(unsignedInt, unsigned int)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(qlonglong, qlonglong)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(qulonglong, qulonglong)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateRealNumbersData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<double>("output");
-
- QTest::newRow("empty") << QByteArray() << 0.0;
- QTest::newRow("a") << QByteArray("a") << 0.0;
- QTest::newRow("1.0") << QByteArray("1.0") << 1.0;
- QTest::newRow(" 1") << QByteArray(" 1") << 1.0;
- QTest::newRow(" \\r\\n1.2") << QByteArray(" \r\n1.2") << 1.2;
- QTest::newRow("3.14") << QByteArray("3.14") << 3.14;
- QTest::newRow("-3.14") << QByteArray("-3.14") << -3.14;
- QTest::newRow(" -3.14") << QByteArray(" -3.14") << -3.14;
- QTest::newRow("314e-02") << QByteArray("314e-02") << 3.14;
- QTest::newRow("314E-02") << QByteArray("314E-02") << 3.14;
- QTest::newRow("314e+02") << QByteArray("314e+02") << 31400.;
- QTest::newRow("314E+02") << QByteArray("314E+02") << 31400.;
-
- // ### add numbers with exponents
-
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << 0.0;
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << 0.0;
- }
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_read_operator_FromDevice_data() \
- { generateRealNumbersData(false); } \
- void tst_QTextStream:: texttype##_read_operator_FromDevice() \
- { \
- QFETCH(QByteArray, input); \
- QFETCH(double, output); \
- type sh; \
- QTextStream stream(&input); \
- stream >> sh; \
- QCOMPARE(sh, (type)output); \
- }
-IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(float, float)
-IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(double, double)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateStringData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QByteArray>("array_output");
- QTest::addColumn<QString>("string_output");
-
- QTest::newRow("empty") << QByteArray() << QByteArray() << QString();
- QTest::newRow("a") << QByteArray("a") << QByteArray("a") << QString("a");
- QTest::newRow("a b") << QByteArray("a b") << QByteArray("a") << QString("a");
- QTest::newRow(" a b") << QByteArray(" a b") << QByteArray("a") << QString("a");
- QTest::newRow("a1") << QByteArray("a1") << QByteArray("a1") << QString("a1");
- QTest::newRow("a1 b1") << QByteArray("a1 b1") << QByteArray("a1") << QString("a1");
- QTest::newRow(" a1 b1") << QByteArray(" a1 b1") << QByteArray("a1") << QString("a1");
- QTest::newRow("\\n\\n\\nole i dole\\n") << QByteArray("\n\n\nole i dole\n") << QByteArray("ole") << QString("ole");
-
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << QByteArray() << QString();
- QTest::newRow("utf16-BE (corrupt)") << QByteArray("\xff", 1) << QByteArray("\xff") << QString::fromLatin1("\xff");
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << QByteArray() << QString();
- QTest::newRow("utf16-LE (corrupt)") << QByteArray("\xfe", 1) << QByteArray("\xfe") << QString::fromLatin1("\xfe");
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::charPtr_read_operator_FromDevice_data()
-{
- generateStringData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::charPtr_read_operator_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QByteArray, array_output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- char buf[1024];
- stream >> buf;
-
- QCOMPARE((const char *)buf, array_output.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::stringRef_read_operator_FromDevice_data()
-{
- generateStringData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::stringRef_read_operator_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, string_output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- QString tmp;
- stream >> tmp;
-
- QCOMPARE(tmp, string_output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::byteArray_read_operator_FromDevice_data()
-{
- generateStringData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::byteArray_read_operator_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QByteArray, array_output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- QByteArray array;
- stream >> array;
-
- QCOMPARE(array, array_output);
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_write_operator_ToDevice() \
- { \
- QFETCH(qulonglong, number); \
- QFETCH(QByteArray, data); \
- QFETCH(QByteArray, dataWithSeparators); \
- \
- QBuffer buffer; \
- buffer.open(QBuffer::WriteOnly); \
- QTextStream stream(&buffer); \
- stream.setLocale(QLocale::c()); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data().constData(), data.constData()); \
- \
- QLocale locale("en-US"); \
- buffer.reset(); buffer.buffer().clear(); \
- stream.setLocale(locale); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data(), dataWithSeparators); \
- \
- locale.setNumberOptions(QLocale::OmitGroupSeparator); \
- buffer.reset(); buffer.buffer().clear(); \
- stream.setLocale(locale); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data().constData(), data.constData()); \
- \
- locale = QLocale("de-DE"); \
- buffer.reset(); buffer.buffer().clear(); \
- stream.setLocale(locale); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data(), dataWithSeparators.replace(',', '.')); \
- }
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::signedShort_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("-32768") << QByteArray("-32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("-32767") << QByteArray("-32,767");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("0") << QByteArray("0");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(signedShort, signed short)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::unsignedShort_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("0") << QByteArray("0");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(unsignedShort, unsigned short)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::signedInt_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("-2147483648") << QByteArray("-2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("-2147483647") << QByteArray("-2,147,483,647");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("0") << QByteArray("0");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(signedInt, signed int)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::unsignedInt_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("0") << QByteArray("0");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(unsignedInt, unsigned int)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::qlonglong_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("4294967296") << QByteArray("4,294,967,296");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("4294967297") << QByteArray("4,294,967,297");
- QTest::newRow("9223372036854775807") << Q_UINT64_C(9223372036854775807) << QByteArray("9223372036854775807") << QByteArray("9,223,372,036,854,775,807");
- QTest::newRow("9223372036854775808") << Q_UINT64_C(9223372036854775808) << QByteArray("-9223372036854775808") << QByteArray("-9,223,372,036,854,775,808");
- QTest::newRow("9223372036854775809") << Q_UINT64_C(9223372036854775809) << QByteArray("-9223372036854775807") << QByteArray("-9,223,372,036,854,775,807");
- QTest::newRow("18446744073709551615") << Q_UINT64_C(18446744073709551615) << QByteArray("-1") << QByteArray("-1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(qlonglong, qlonglong)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::qulonglong_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("18446744073709551615") << QByteArray("18,446,744,073,709,551,615");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("4294967296") << QByteArray("4,294,967,296");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("4294967297") << QByteArray("4,294,967,297");
- QTest::newRow("9223372036854775807") << Q_UINT64_C(9223372036854775807) << QByteArray("9223372036854775807") << QByteArray("9,223,372,036,854,775,807");
- QTest::newRow("9223372036854775808") << Q_UINT64_C(9223372036854775808) << QByteArray("9223372036854775808") << QByteArray("9,223,372,036,854,775,808");
- QTest::newRow("9223372036854775809") << Q_UINT64_C(9223372036854775809) << QByteArray("9223372036854775809") << QByteArray("9,223,372,036,854,775,809");
- QTest::newRow("18446744073709551615") << Q_UINT64_C(18446744073709551615) << QByteArray("18446744073709551615") << QByteArray("18,446,744,073,709,551,615");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(qulonglong, qulonglong)
- ;
-
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateRealNumbersDataWrite()
-{
- QTest::addColumn<double>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << 0.0 << QByteArray("0") << QByteArray("0");
- QTest::newRow("3.14") << 3.14 << QByteArray("3.14") << QByteArray("3.14");
- QTest::newRow("-3.14") << -3.14 << QByteArray("-3.14") << QByteArray("-3.14");
- QTest::newRow("1.2e+10") << 1.2e+10 << QByteArray("1.2e+10") << QByteArray("1.2e+10");
- QTest::newRow("-1.2e+10") << -1.2e+10 << QByteArray("-1.2e+10") << QByteArray("-1.2e+10");
- QTest::newRow("12345") << 12345. << QByteArray("12345") << QByteArray("12,345");
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_write_operator_ToDevice_data() \
- { generateRealNumbersDataWrite(); } \
- void tst_QTextStream:: texttype##_write_operator_ToDevice() \
- { \
- QFETCH(double, number); \
- QFETCH(QByteArray, data); \
- QFETCH(QByteArray, dataWithSeparators); \
- \
- QBuffer buffer; \
- buffer.open(QBuffer::WriteOnly); \
- QTextStream stream(&buffer); \
- stream.setLocale(QLocale::c()); \
- float f = (float)number; \
- stream << f; \
- stream.flush(); \
- QCOMPARE(buffer.data().constData(), data.constData()); \
- \
- buffer.reset(); \
- stream.setLocale(QLocale("en-US")); \
- stream << f; \
- stream.flush(); \
- QCOMPARE(buffer.data(), dataWithSeparators); \
- }
-IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(float, float)
-IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(double, float)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::string_write_operator_ToDevice_data()
-{
- QTest::addColumn<QByteArray>("bytedata");
- QTest::addColumn<QString>("stringdata");
- QTest::addColumn<QByteArray>("result");
-
- QTest::newRow("empty") << QByteArray("", 1) << QString(1, '\0') << QByteArray("", 1);
- QTest::newRow("a") << QByteArray("a") << QString("a") << QByteArray("a");
- QTest::newRow("a cow jumped over the moon")
- << QByteArray("a cow jumped over the moon")
- << QString("a cow jumped over the moon")
- << QByteArray("a cow jumped over the moon");
-
- // ### get the utf16-be test on its legs.
- /*
- QTest::newRow("utf16-BE (a cow jumped over the moon)")
- << QByteArray("\xff\xfe\x00\x61\x00\x20\x00\x63\x00\x6f\x00\x77\x00\x20\x00\x6a\x00\x75\x00\x6d\x00\x70\x00\x65\x00\x64\x00\x20\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x20\x00\x74\x00\x68\x00\x65\x00\x20\x00\x6d\x00\x6f\x00\x6f\x00\x6e\x00\x0a", 56)
- << QString("a cow jumped over the moon")
- << QByteArray("a cow jumped over the moon");
- */
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::string_write_operator_ToDevice()
-{
- QFETCH(QByteArray, bytedata);
- QFETCH(QString, stringdata);
- QFETCH(QByteArray, result);
-
- {
- // char*
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << bytedata.constData();
- stream.flush();
- QCOMPARE(buf.buffer().constData(), result.constData());
- }
- {
- // QByteArray
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << bytedata;
- stream.flush();
- QCOMPARE(buf.buffer().constData(), result.constData());
- }
- {
- // QString
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << stringdata;
- stream.flush();
- QCOMPARE(buf.buffer().constData(), result.constData());
- }
-}
-
-void tst_QTextStream::latin1String_write_operator_ToDevice()
-{
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << QLatin1String("No explicit length");
- stream << QLatin1String("Explicit length - ignore this part", 15);
- stream.flush();
- QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
-}
-
-void tst_QTextStream::stringref_write_operator_ToDevice()
-{
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- const QString expected = "No explicit lengthExplicit length";
-
- stream << expected.leftRef(18);
- stream << expected.midRef(18);
- stream.flush();
- QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::useCase1()
-{
- QFile::remove("testfile");
- QFile file("testfile");
- QVERIFY(file.open(QFile::ReadWrite));
-
- {
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << 4.15 << ' ' << QByteArray("abc") << ' ' << QString("ole");
- }
-
- file.seek(0);
- QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
- file.seek(0);
-
- {
- double d;
- QByteArray a;
- QString s;
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream >> d;
- stream >> a;
- stream >> s;
-
- QCOMPARE(d, 4.15);
- QCOMPARE(a, QByteArray("abc"));
- QCOMPARE(s, QString("ole"));
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::useCase2()
-{
- QFile::remove("testfile");
- QFile file("testfile");
- QVERIFY(file.open(QFile::ReadWrite));
-
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << 4.15 << ' ' << QByteArray("abc") << ' ' << QString("ole");
-
- file.close();
- QVERIFY(file.open(QFile::ReadWrite));
-
- QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
-
- file.close();
- QVERIFY(file.open(QFile::ReadWrite));
-
- double d;
- QByteArray a;
- QString s;
- QTextStream stream2(&file);
- stream2.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream2.setAutoDetectUnicode(true);
-
- stream2 >> d;
- stream2 >> a;
- stream2 >> s;
-
- QCOMPARE(d, 4.15);
- QCOMPARE(a, QByteArray("abc"));
- QCOMPARE(s, QString("ole"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::manipulators_data()
-{
- QTest::addColumn<int>("flags");
- QTest::addColumn<int>("width");
- QTest::addColumn<double>("realNumber");
- QTest::addColumn<int>("intNumber");
- QTest::addColumn<QString>("textData");
- QTest::addColumn<QByteArray>("result");
-
- QTest::newRow("no flags") << 0 << 0 << 5.0 << 5 << QString("five") << QByteArray("55five");
- QTest::newRow("rightadjust") << 0 << 10 << 5.0 << 5 << QString("five") << QByteArray(" 5 5 five");
-
- // ### FIX
-// QTest::newRow("leftadjust") << int(QTextStream::left) << 10 << 5.0 << 5 << QString("five") << QByteArray("5 5 five ");
-// QTest::newRow("showpos") << int(QTextStream::showpos) << 10 << 5.0 << 5 << QString("five") << QByteArray(" +5 +5 five");
-// QTest::newRow("showpos2") << int(QTextStream::showpos) << 5 << 3.14 << -5 << QString("five") << QByteArray("+3.14 -5 five");
-// QTest::newRow("hex") << int(QTextStream::hex | QTextStream::showbase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0x5 five");
-// QTest::newRow("hex uppercase") << int(QTextStream::hex | QTextStream::uppercase | QTextStream::showbase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0X5 five");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::manipulators()
-{
-// QFETCH(int, flags);
- QFETCH(int, width);
- QFETCH(double, realNumber);
- QFETCH(int, intNumber);
- QFETCH(QString, textData);
- QFETCH(QByteArray, result);
-
- QBuffer buffer;
- buffer.open(QBuffer::WriteOnly);
-
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
-// stream.setFlags(flags);
- stream.setFieldWidth(width);
- stream << realNumber;
- stream << intNumber;
- stream << textData;
- stream.flush();
-
- QCOMPARE(buffer.data().constData(), result.constData());
-}
-
-void tst_QTextStream::generateBOM()
-{
- QFile::remove("bom.txt");
- {
- QFile file("bom.txt");
- QVERIFY(file.open(QFile::ReadWrite | QFile::Truncate));
-
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("UTF-16LE"));
- stream << "Hello" << endl;
-
- file.close();
- QVERIFY(file.open(QFile::ReadOnly));
- QCOMPARE(file.readAll(), QByteArray("\x48\x00\x65\00\x6c\00\x6c\00\x6f\x00\x0a\x00", 12));
- }
-
- QFile::remove("bom.txt");
- {
- QFile file("bom.txt");
- QVERIFY(file.open(QFile::ReadWrite | QFile::Truncate));
-
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("UTF-16LE"));
- stream << bom << "Hello" << endl;
-
- file.close();
- QVERIFY(file.open(QFile::ReadOnly));
- QCOMPARE(file.readAll(), QByteArray("\xff\xfe\x48\x00\x65\00\x6c\00\x6c\00\x6f\x00\x0a\x00", 14));
- }
-}
-
-void tst_QTextStream::readBomSeekBackReadBomAgain()
-{
- QFile::remove("utf8bom");
- QFile file("utf8bom");
- QVERIFY(file.open(QFile::ReadWrite));
- file.write("\xef\xbb\xbf""Andreas");
- file.seek(0);
- QCOMPARE(file.pos(), qint64(0));
-
- QTextStream stream(&file);
- stream.setCodec("UTF-8");
- QString Andreas;
- stream >> Andreas;
- QCOMPARE(Andreas, QString("Andreas"));
- stream.seek(0);
- stream >> Andreas;
- QCOMPARE(Andreas, QString("Andreas"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::status_real_read_data()
-{
- QTest::addColumn<QString>("input");
- QTest::addColumn<double>("expected_f");
- QTest::addColumn<QString>("expected_w");
- QTest::addColumn<QList<int> >("results");
-
- QTest::newRow("1.23 abc ") << QString("1.23 abc ") << 1.23 << QString("abc")
- << (QList<int>()
- << (int)QTextStream::Ok
- << (int)QTextStream::ReadCorruptData
- << (int)QTextStream::Ok
- << (int)QTextStream::Ok
- << (int)QTextStream::ReadPastEnd);
-}
-
-void tst_QTextStream::status_real_read()
-{
- QFETCH(QString, input);
- QFETCH(double, expected_f);
- QFETCH(QString, expected_w);
- QFETCH(QList<int>, results);
-
- QTextStream s(&input);
- double f = 0.0;
- QString w;
- s >> f;
- QCOMPARE((int)s.status(), results.at(0));
- QCOMPARE(f, expected_f);
- s >> f;
- QCOMPARE((int)s.status(), results.at(1));
- s.resetStatus();
- QCOMPARE((int)s.status(), results.at(2));
- s >> w;
- QCOMPARE((int)s.status(), results.at(3));
- QCOMPARE(w, expected_w);
- s >> f;
- QCOMPARE((int)s.status(), results.at(4));
-}
-
-void tst_QTextStream::status_integer_read()
-{
- QTextStream s("123 abc ");
- int i;
- QString w;
- s >> i;
- QCOMPARE(s.status(), QTextStream::Ok);
- s >> i;
- QCOMPARE(s.status(), QTextStream::ReadCorruptData);
- s.resetStatus();
- QCOMPARE(s.status(), QTextStream::Ok);
- s >> w;
- QCOMPARE(s.status(), QTextStream::Ok);
- QCOMPARE(w, QString("abc"));
- s >> i;
- QCOMPARE(s.status(), QTextStream::ReadPastEnd);
-}
-
-void tst_QTextStream::status_word_read()
-{
- QTextStream s("abc ");
- QString w;
- s >> w;
- QCOMPARE(s.status(), QTextStream::Ok);
- s >> w;
- QCOMPARE(s.status(), QTextStream::ReadPastEnd);
-}
-
-class FakeBuffer : public QBuffer
-{
-protected:
- qint64 writeData(const char *c, qint64 i) { return m_lock ? 0 : QBuffer::writeData(c, i); }
-public:
- FakeBuffer(bool locked = false) : m_lock(locked) {}
- void setLocked(bool locked) { m_lock = locked; }
-private:
- bool m_lock;
-};
-
-void tst_QTextStream::status_write_error()
-{
- FakeBuffer fb(false);
- QVERIFY(fb.open(QBuffer::ReadWrite));
- QTextStream fs(&fb);
- fs.setCodec(QTextCodec::codecForName("latin1"));
- /* first write some initial content */
- fs << "hello";
- fs.flush();
- QCOMPARE(fs.status(), QTextStream::Ok);
- QCOMPARE(fb.data(), QByteArray("hello"));
- /* then test that writing can cause an error */
- fb.setLocked(true);
- fs << "error";
- fs.flush();
- QCOMPARE(fs.status(), QTextStream::WriteFailed);
- QCOMPARE(fb.data(), QByteArray("hello"));
- /* finally test that writing after an error doesn't change the stream any more */
- fb.setLocked(false);
- fs << "can't do that";
- fs.flush();
- QCOMPARE(fs.status(), QTextStream::WriteFailed);
- QCOMPARE(fb.data(), QByteArray("hello"));
-}
-
-void tst_QTextStream::alignAccountingStyle()
-{
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(4);
- out.setPadChar('0');
- out << -1;
- QCOMPARE(result, QLatin1String("-001"));
- }
-
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(4);
- out.setPadChar('0');
- out << "-1";
- QCOMPARE(result, QLatin1String("00-1"));
- }
-
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(6);
- out.setPadChar('0');
- out << -1.2;
- QCOMPARE(result, QLatin1String("-001.2"));
- }
-
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(6);
- out.setPadChar('0');
- out << "-1.2";
- QCOMPARE(result, QLatin1String("00-1.2"));
- }
-}
-
-void tst_QTextStream::setCodec()
-{
- QByteArray ba("\xe5 v\xe6r\n\xc3\xa5 v\xc3\xa6r\n");
- QString res = QLatin1String("\xe5 v\xe6r");
-
- QTextStream stream(ba);
- stream.setCodec("ISO 8859-1");
- QCOMPARE(stream.readLine(),res);
- stream.setCodec("UTF-8");
- QCOMPARE(stream.readLine(),res);
-}
-
-void tst_QTextStream::double_write_with_flags_data()
-{
- QTest::addColumn<double>("number");
- QTest::addColumn<QString>("output");
- QTest::addColumn<int>("numberFlags");
- QTest::addColumn<int>("realNumberNotation");
-
- QTest::newRow("-ForceSign") << -1.23 << QString("-1.23") << (int)QTextStream::ForceSign << 0;
- QTest::newRow("+ForceSign") << 1.23 << QString("+1.23") << (int)QTextStream::ForceSign << 0;
- QTest::newRow("inf") << qInf() << QString("inf") << 0 << 0;
- QTest::newRow("-inf") << -qInf() << QString("-inf") << 0 << 0;
- QTest::newRow("inf uppercase") << qInf() << QString("INF") << (int)QTextStream::UppercaseDigits << 0;
- QTest::newRow("-inf uppercase") << -qInf() << QString("-INF") << (int)QTextStream::UppercaseDigits << 0;
- QTest::newRow("nan") << qQNaN() << QString("nan") << 0 << 0;
- QTest::newRow("NAN") << qQNaN() << QString("NAN") << (int)QTextStream::UppercaseDigits << 0;
- QTest::newRow("scientific") << 1.234567e+02 << QString("1.234567e+02") << 0 << (int)QTextStream::ScientificNotation;
- QTest::newRow("scientific2") << 1.234567e+02 << QString("1.234567e+02") << (int)QTextStream::UppercaseBase << (int)QTextStream::ScientificNotation;
- QTest::newRow("scientific uppercase") << 1.234567e+02 << QString("1.234567E+02") << (int)QTextStream::UppercaseDigits << (int)QTextStream::ScientificNotation;
-}
-
-void tst_QTextStream::double_write_with_flags()
-{
- QFETCH(double, number);
- QFETCH(QString, output);
- QFETCH(int, numberFlags);
- QFETCH(int, realNumberNotation);
-
- QString buf;
- QTextStream stream(&buf);
- if (numberFlags)
- stream.setNumberFlags(QTextStream::NumberFlag(numberFlags));
- if (realNumberNotation)
- stream.setRealNumberNotation(QTextStream::RealNumberNotation(realNumberNotation));
- stream << number;
- QCOMPARE(buf, output);
-}
-
-void tst_QTextStream::double_write_with_precision_data()
-{
- QTest::addColumn<int>("precision");
- QTest::addColumn<double>("value");
- QTest::addColumn<QString>("result");
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream::setRealNumberPrecision: Invalid precision (-1)");
- QTest::newRow("-1") << -1 << 3.14159 << QString("3.14159");
- QTest::newRow("0") << 0 << 3.14159 << QString("3");
- QTest::newRow("1") << 1 << 3.14159 << QString("3");
- QTest::newRow("2") << 2 << 3.14159 << QString("3.1");
- QTest::newRow("3") << 3 << 3.14159 << QString("3.14");
- QTest::newRow("5") << 5 << 3.14159 << QString("3.1416");
- QTest::newRow("6") << 6 << 3.14159 << QString("3.14159");
- QTest::newRow("7") << 7 << 3.14159 << QString("3.14159");
- QTest::newRow("10") << 10 << 3.14159 << QString("3.14159");
-}
-
-void tst_QTextStream::double_write_with_precision()
-{
- QFETCH(int, precision);
- QFETCH(double, value);
- QFETCH(QString, result);
-
- QString buf;
- QTextStream stream(&buf);
- stream.setRealNumberPrecision(precision);
- stream << value;
- QCOMPARE(buf, result);
-}
-
-void tst_QTextStream::int_read_with_locale_data()
-{
- QTest::addColumn<QString>("locale");
- QTest::addColumn<QString>("input");
- QTest::addColumn<int>("output");
-
- QTest::newRow("C -123") << QString("C") << QString("-123") << -123;
- QTest::newRow("C +123") << QString("C") << QString("+123") << 123;
- QTest::newRow("C 12345") << QString("C") << QString("12345") << 12345;
- QTest::newRow("C 12,345") << QString("C") << QString("12,345") << 12;
- QTest::newRow("C 12.345") << QString("C") << QString("12.345") << 12;
-
- QTest::newRow("de_DE -123") << QString("de_DE") << QString("-123") << -123;
- QTest::newRow("de_DE +123") << QString("de_DE") << QString("+123") << 123;
- QTest::newRow("de_DE 12345") << QString("de_DE") << QString("12345") << 12345;
- QTest::newRow("de_DE 12.345") << QString("de_DE") << QString("12.345") << 12345;
- QTest::newRow("de_DE .12345") << QString("de_DE") << QString(".12345") << 0;
-}
-
-void tst_QTextStream::int_read_with_locale()
-{
- QFETCH(QString, locale);
- QFETCH(QString, input);
- QFETCH(int, output);
-
- QTextStream stream(&input);
- stream.setLocale(locale);
- int result;
- stream >> result;
- QCOMPARE(result, output);
-}
-
-void tst_QTextStream::int_write_with_locale_data()
-{
- QTest::addColumn<QString>("locale");
- QTest::addColumn<int>("numberFlags");
- QTest::addColumn<int>("input");
- QTest::addColumn<QString>("output");
-
- QTest::newRow("C -123") << QString("C") << 0 << -123 << QString("-123");
- QTest::newRow("C +123") << QString("C") << (int)QTextStream::ForceSign << 123 << QString("+123");
- QTest::newRow("C 12345") << QString("C") << 0 << 12345 << QString("12345");
-
- QTest::newRow("de_DE -123") << QString("de_DE") << 0 << -123 << QString("-123");
- QTest::newRow("de_DE +123") << QString("de_DE") << (int)QTextStream::ForceSign << 123 << QString("+123");
- QTest::newRow("de_DE 12345") << QString("de_DE") << 0 << 12345 << QString("12.345");
-}
-
-void tst_QTextStream::int_write_with_locale()
-{
- QFETCH(QString, locale);
- QFETCH(int, numberFlags);
- QFETCH(int, input);
- QFETCH(QString, output);
-
- QString result;
- QTextStream stream(&result);
- stream.setLocale(locale);
- if (numberFlags)
- stream.setNumberFlags(QTextStream::NumberFlags(numberFlags));
- stream << input;
- QCOMPARE(result, output);
-}
-
-void tst_QTextStream::textModeOnEmptyRead()
-{
- const QString filename(tempDir.path() + QLatin1String("/textmodetest.txt"));
-
- QFile file(filename);
- QVERIFY2(file.open(QIODevice::ReadWrite | QIODevice::Text), qPrintable(file.errorString()));
- QTextStream stream(&file);
- QVERIFY(file.isTextModeEnabled());
- QString emptyLine = stream.readLine(); // Text mode flag cleared here
- QVERIFY(file.isTextModeEnabled());
-}
-
-
-// ------------------------------------------------------------------------------
-
-QTEST_MAIN(tst_QTextStream)
-#include "tst_qtextstream.moc"
-