1dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine/*
28267511c96e3226e45a0be773ee442b66261824dvchtchetkine * Copyright (C) 2009 The Android Open Source Project
3dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine *
4dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * Licensed under the Apache License, Version 2.0 (the "License");
5dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * you may not use this file except in compliance with the License.
6dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * You may obtain a copy of the License at
7dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine *
8dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine *      http://www.apache.org/licenses/LICENSE-2.0
9dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine *
10dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * Unless required by applicable law or agreed to in writing, software
11dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * distributed under the License is distributed on an "AS IS" BASIS,
12dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * See the License for the specific language governing permissions and
14dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine * limitations under the License.
15dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine */
16dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine
17dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine/** \file
18dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  This file consists of implementation of class AdbIOCompletion that
198267511c96e3226e45a0be773ee442b66261824dvchtchetkine  encapsulates a generic wrapper around OVERLAPPED Win32 structure
208267511c96e3226e45a0be773ee442b66261824dvchtchetkine  returned from asynchronous I/O requests.
21dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine*/
22dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine
23dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine#include "stdafx.h"
24dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine#include "adb_io_completion.h"
25dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine
26dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkineAdbIOCompletion::AdbIOCompletion(AdbEndpointObject* parent_io_obj,
27dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine                                 ULONG expected_trans_size,
28dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine                                 HANDLE event_hndl)
29dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine    : AdbObjectHandle(AdbObjectTypeIoCompletion),
30dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine      expected_transfer_size_(expected_trans_size),
31dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine      parent_io_object_(parent_io_obj) {
32dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  ATLASSERT(NULL != parent_io_obj);
33dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  parent_io_obj->AddRef();
34dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  ZeroMemory(&overlapped_, sizeof(overlapped_));
35dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  overlapped_.hEvent = event_hndl;
36dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine}
37dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine
38dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkineAdbIOCompletion::~AdbIOCompletion() {
39dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  parent_io_object_->Release();
40dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine}
41dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine
42dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkinebool AdbIOCompletion::IsCompleted() {
43dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  SetLastError(NO_ERROR);
44dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  if (!IsOpened()) {
45dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine    SetLastError(ERROR_INVALID_HANDLE);
46dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine    return true;
47dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  }
48dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine
49dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine  return HasOverlappedIoCompleted(overlapped()) ? true : false;
50dceaaa52cec11631c72cfea5fb74ee607602ecdevchtchetkine}
51