| 73 |
byte[] assetData; |
byte[] assetData; |
| 74 |
StorageResponse dataResponse; |
StorageResponse dataResponse; |
| 75 |
|
|
| 76 |
if ((dataResponse = server.StorageProvider.TryFetchDataMetadata(assetID, UUID.Zero, out metadata, out assetData)) == StorageResponse.Success) |
if ((dataResponse = server.StorageProvider.TryFetchDataMetadata(assetID, out metadata, out assetData)) == StorageResponse.Success) |
| 77 |
{ |
{ |
| 78 |
MemoryStream stream = new MemoryStream(); |
MemoryStream stream = new MemoryStream(); |
| 79 |
|
|
| 142 |
byte[] assetData = null; |
byte[] assetData = null; |
| 143 |
Metadata metadata = new Metadata(); |
Metadata metadata = new Metadata(); |
| 144 |
|
|
| 145 |
|
Logger.Log.Debug("Handling OpenSim asset upload"); |
| 146 |
|
|
| 147 |
try |
try |
| 148 |
{ |
{ |
| 149 |
using (XmlReader reader = XmlReader.Create(request.Body)) |
using (XmlReader reader = XmlReader.Create(request.Body)) |
| 158 |
reader.Skip(); |
reader.Skip(); |
| 159 |
reader.ReadEndElement(); |
reader.ReadEndElement(); |
| 160 |
|
|
| 161 |
int readBytes = 0; |
// HACK: Broken on Mono. https://bugzilla.novell.com/show_bug.cgi?id=464229 |
| 162 |
byte[] buffer = new byte[1024]; |
//int readBytes = 0; |
| 163 |
MemoryStream stream = new MemoryStream(); |
//byte[] buffer = new byte[1024]; |
| 164 |
BinaryWriter writer = new BinaryWriter(stream); |
//MemoryStream stream = new MemoryStream(); |
| 165 |
while ((readBytes = reader.ReadElementContentAsBase64(buffer, 0, buffer.Length)) > 0) |
//BinaryWriter writer = new BinaryWriter(stream); |
| 166 |
writer.Write(buffer, 0, readBytes); |
//while ((readBytes = reader.ReadElementContentAsBase64(buffer, 0, buffer.Length)) > 0) |
| 167 |
writer.Flush(); |
// writer.Write(buffer, 0, readBytes); |
| 168 |
assetData = stream.GetBuffer(); |
//writer.Flush(); |
| 169 |
Array.Resize<byte>(ref assetData, (int)stream.Length); |
//assetData = stream.GetBuffer(); |
| 170 |
|
//Array.Resize<byte>(ref assetData, (int)stream.Length); |
| 171 |
|
|
| 172 |
|
assetData = Convert.FromBase64String(reader.ReadElementContentAsString()); |
| 173 |
|
|
| 174 |
int type; |
int type; |
| 175 |
Int32.TryParse(reader.ReadElementContentAsString("Type", String.Empty), out type); |
Int32.TryParse(reader.ReadElementContentAsString("Type", String.Empty), out type); |
| 187 |
metadata.SHA1 = OpenMetaverse.Utils.SHA1(assetData); |
metadata.SHA1 = OpenMetaverse.Utils.SHA1(assetData); |
| 188 |
metadata.CreationDate = DateTime.Now; |
metadata.CreationDate = DateTime.Now; |
| 189 |
|
|
| 190 |
StorageResponse storageResponse = server.StorageProvider.TryCreateAsset(metadata, assetData, UUID.Zero); |
StorageResponse storageResponse = server.StorageProvider.TryCreateAsset(metadata, assetData); |
| 191 |
|
|
| 192 |
switch (storageResponse) |
if (storageResponse == StorageResponse.Success) |
|
{ |
|
|
case StorageResponse.Success: |
|
| 193 |
response.Status = HttpStatusCode.Created; |
response.Status = HttpStatusCode.Created; |
| 194 |
break; |
else if (storageResponse == StorageResponse.NotFound) |
|
case StorageResponse.NotFound: |
|
| 195 |
response.Status = HttpStatusCode.NotFound; |
response.Status = HttpStatusCode.NotFound; |
| 196 |
break; |
else |
|
case StorageResponse.AuthNeeded: |
|
|
response.Status = HttpStatusCode.Forbidden; |
|
|
break; |
|
|
case StorageResponse.Failure: |
|
|
default: |
|
| 197 |
response.Status = HttpStatusCode.InternalServerError; |
response.Status = HttpStatusCode.InternalServerError; |
|
break; |
|
|
} |
|
| 198 |
} |
} |
| 199 |
else |
else |
| 200 |
{ |
{ |
| 208 |
response.Status = HttpStatusCode.BadRequest; |
response.Status = HttpStatusCode.BadRequest; |
| 209 |
} |
} |
| 210 |
|
|
| 211 |
|
Logger.Log.Debug("Finished handling OpenSim asset upload, Status: " + response.Status.ToString()); |
| 212 |
return true; |
return true; |
| 213 |
} |
} |
| 214 |
} |
} |