米游社.apk(点击下载) / StcSliceCompleteRequest.java


package io.rong.imlib.filetransfer;

import android.net.Uri;
import android.os.SystemClock;
import android.util.Xml;
import cn.rongcloud.wrapper.CrashConstant;
import com.tencent.imsdk.BaseConstants;
import io.rong.common.RLog;
import io.rong.common.fwlog.FwLog;
import io.rong.imlib.common.ExecutorFactory;
import io.rong.imlib.common.NetUtils;
import io.rong.imlib.filetransfer.FtConst;
import io.rong.imlib.filetransfer.upload.StcSliceUploadResult;
import io.rong.imlib.navigation.NavigationCacheHelper;
import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xmlpull.v1.XmlSerializer;
import wz.h;

public class StcSliceCompleteRequest extends Request {
    private static final String Boundary = "526f6e67436c6f756498";
    private static final String TAG = Request.class.getSimpleName();
    private List<StcSliceUploadResult> mList;
    private SliceRequestCallBack mSliceRequestCallBack;
    private String uploadId;

    public StcSliceCompleteRequest(Configuration configuration, SliceRequestCallBack sliceRequestCallBack, List<StcSliceUploadResult> list) {
        super(configuration, sliceRequestCallBack);
        this.mSliceRequestCallBack = sliceRequestCallBack;
        this.mList = list;
        if (list != null && !list.isEmpty()) {
            this.uploadId = this.mList.get(0).getUploadId();
        }
    }

    private String getUrl(InputStream inputStream) throws Exception {
        SAXParser newSAXParser = SAXParserFactory.newInstance().newSAXParser();
        SliceEndUploadResultParser sliceEndUploadResultParser = new SliceEndUploadResultParser();
        newSAXParser.parse(inputStream, sliceEndUploadResultParser);
        return sliceEndUploadResultParser.getUrl();
    }

    private void setXml(List<StcSliceUploadResult> list, OutputStream outputStream) throws Exception {
        XmlSerializer newSerializer = Xml.newSerializer();
        newSerializer.setOutput(outputStream, "utf-8");
        newSerializer.startDocument("utf-8", Boolean.TRUE);
        newSerializer.startTag(null, "CompleteMultipartUpload");
        newSerializer.attribute(null, h.a.f155981g, "http://s3.amazonaws.com/doc/2006-03-01/");
        for (StcSliceUploadResult stcSliceUploadResult : list) {
            newSerializer.startTag(null, "Part");
            newSerializer.startTag(null, "ETag");
            newSerializer.text(stcSliceUploadResult.getETag());
            newSerializer.endTag(null, "ETag");
            newSerializer.startTag(null, "PartNumber");
            newSerializer.text(String.valueOf(stcSliceUploadResult.getPartNumber()));
            newSerializer.endTag(null, "PartNumber");
            newSerializer.endTag(null, "Part");
        }
        newSerializer.endTag(null, "CompleteMultipartUpload");
        newSerializer.endDocument();
        outputStream.flush();
    }

    @Override // io.rong.imlib.filetransfer.Request
    public boolean enableEndBoundary() {
        return false;
    }

    @Override // io.rong.imlib.filetransfer.Request
    public String getBoundary() {
        return Boundary;
    }

    @Override // io.rong.imlib.filetransfer.Request
    public String getContentType() {
        return "application/xml";
    }

    @Override // io.rong.imlib.filetransfer.Request
    public String getFormData() {
        return "";
    }

    @Override // io.rong.imlib.filetransfer.Request
    public FtConst.MimeType getMimeType() {
        return this.mimeType;
    }

    public String getUploadId() {
        return this.uploadId;
    }

    @Override // io.rong.imlib.filetransfer.Request
    public String getUploadPlatformTag() {
        return "SS3";
    }

    @Override // io.rong.imlib.filetransfer.Request
    public String getUploadedUrl(String str) {
        return null;
    }

    @Override // io.rong.imlib.filetransfer.Request
    public void headers(HttpURLConnection httpURLConnection) {
        httpURLConnection.setRequestProperty("Authorization", this.stcAuthorization);
        httpURLConnection.setRequestProperty("x-amz-content-sha256", this.stcContentSha256);
        httpURLConnection.setRequestProperty("x-amz-date", this.stcDate);
    }

    @Override // io.rong.imlib.filetransfer.Request
    public void sendRequest() {
        DataOutputStream dataOutputStream;
        Throwable th2;
        Exception e10;
        String str = TAG;
        RLog.d(str, "completeRequest auth start");
        if (!this.requestCallBack.doAuth(this)) {
            this.requestCallBack.onError(this, BaseConstants.ERR_SVR_FRIENDSHIP_INVALID_SDKAPPID);
            return;
        }
        RLog.d(str, "completeRequest auth finish");
        BufferedInputStream bufferedInputStream = null;
        try {
            if (this.method.equals("POST")) {
                FwLog.write(3, 1, FwLog.LogTag.L_MEDIA_UPLOAD_T.getTag(), "id|type", this.uploadId, getUploadPlatformTag());
                long elapsedRealtime = SystemClock.elapsedRealtime();
                HttpURLConnection createURLConnection = NetUtils.createURLConnection(this.serverIp);
                this.conn = createURLConnection;
                createURLConnection.setDoOutput(true);
                this.conn.setDoInput(true);
                this.conn.setUseCaches(false);
                this.conn.setRequestMethod(this.method);
                this.conn.setConnectTimeout(120000);
                headers(this.conn);
                this.conn.setRequestProperty("Content-Type", getContentType());
                this.conn.connect();
                dataOutputStream = new DataOutputStream(this.conn.getOutputStream());
                try {
                    setXml(this.mList, dataOutputStream);
                    final int responseCode = this.conn.getResponseCode();
                    io.rong.common.rlog.RLog.d(str, "upload  end finish,responseCode:" + responseCode);
                    BufferedInputStream bufferedInputStream2 = new BufferedInputStream(this.conn.getInputStream());
                    try {
                        FwLog.write(3, 1, FwLog.LogTag.L_MEDIA_UPLOAD_R.getTag(), "id|type|code", this.uploadId, getUploadPlatformTag(), Integer.valueOf(responseCode));
                        final long elapsedRealtime2 = SystemClock.elapsedRealtime() - elapsedRealtime;
                        final String host = Uri.parse(this.serverIp).getHost();
                        if (responseCode >= 200) {
                            if (responseCode < 300) {
                                ExecutorFactory.getInstance().PriorityExecutor().execute(new Runnable() {
                                    /* class io.rong.imlib.filetransfer.StcSliceCompleteRequest.AnonymousClass1 */

                                    public void run() {
                                        String queryRequestIP = NavigationCacheHelper.queryRequestIP(host);
                                        FwLog.write(-1, 1, FwLog.LogTag.L_MEDIA_STATISTICS_S.getTag(), "id|code|type|size|duration|host|ip", StcSliceCompleteRequest.this.uploadId, Integer.valueOf(responseCode), StcSliceCompleteRequest.this.getUploadPlatformTag(), Long.valueOf(StcSliceCompleteRequest.this.fileLength), Long.valueOf(elapsedRealtime2), host, queryRequestIP);
                                    }
                                });
                                RLog.d(str, "completeRequest request finish");
                                this.requestCallBack.onComplete(getUrl(bufferedInputStream2));
                                bufferedInputStream = bufferedInputStream2;
                            }
                        }
                        RLog.e(str, "completeRequest responseCode error:" + responseCode);
                        FwLog.write(-1, 1, FwLog.LogTag.L_MEDIA_STATISTICS_S.getTag(), "id|code|type|host", this.uploadId, Integer.valueOf(responseCode), getUploadPlatformTag(), host);
                        this.requestCallBack.onError(this, responseCode);
                        bufferedInputStream = bufferedInputStream2;
                    } catch (Exception e11) {
                        e10 = e11;
                        bufferedInputStream = bufferedInputStream2;
                        try {
                            this.requestCallBack.onError(this, BaseConstants.ERR_SVR_FRIENDSHIP_INVALID_SDKAPPID);
                            FwLog.write(2, 1, FwLog.LogTag.L_MEDIA_S.getTag(), CrashConstant.CRASH_STACK_KEY, FwLog.stackToString(e10));
                            Request.closeInputStream(bufferedInputStream);
                            Request.closeOutputStream(dataOutputStream);
                            disconnect(this.conn);
                        } catch (Throwable th3) {
                            th2 = th3;
                        }
                    } catch (Throwable th4) {
                        th2 = th4;
                        bufferedInputStream = bufferedInputStream2;
                        Request.closeInputStream(bufferedInputStream);
                        Request.closeOutputStream(dataOutputStream);
                        disconnect(this.conn);
                        throw th2;
                    }
                } catch (Exception e12) {
                    e10 = e12;
                    this.requestCallBack.onError(this, BaseConstants.ERR_SVR_FRIENDSHIP_INVALID_SDKAPPID);
                    FwLog.write(2, 1, FwLog.LogTag.L_MEDIA_S.getTag(), CrashConstant.CRASH_STACK_KEY, FwLog.stackToString(e10));
                    Request.closeInputStream(bufferedInputStream);
                    Request.closeOutputStream(dataOutputStream);
                    disconnect(this.conn);
                }
            } else {
                dataOutputStream = null;
            }
        } catch (Exception e13) {
            e10 = e13;
            dataOutputStream = null;
            this.requestCallBack.onError(this, BaseConstants.ERR_SVR_FRIENDSHIP_INVALID_SDKAPPID);
            FwLog.write(2, 1, FwLog.LogTag.L_MEDIA_S.getTag(), CrashConstant.CRASH_STACK_KEY, FwLog.stackToString(e10));
            Request.closeInputStream(bufferedInputStream);
            Request.closeOutputStream(dataOutputStream);
            disconnect(this.conn);
        } catch (Throwable th5) {
            th2 = th5;
            dataOutputStream = null;
            Request.closeInputStream(bufferedInputStream);
            Request.closeOutputStream(dataOutputStream);
            disconnect(this.conn);
            throw th2;
        }
        Request.closeInputStream(bufferedInputStream);
        Request.closeOutputStream(dataOutputStream);
        disconnect(this.conn);
    }
}